+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.51 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Delphi инкапсуляция

11.04.2011 14:15
Vsevolod Leonov

Не ходите дети в Африку гулять

Недавно я был на Всероссийском съезде учителей информатики (http://it.teacher.msu.ru/). Без всякого сомнения, это было очень полезное мероприятие. Иногда начинаешь читать хабро-образные форумы на тему "как правильно учить детей программированию", и мозг переходит в состояние тихой эйфории от осознания содержательности дискуссии и бронебойности аргументов. Однако это не позволяет полностью устранить сомнения на тему "а сами-то холиварщики работают учителями?" На съезде мне удалось побыть среди учителей, послушать множество интересных докладов, ознакомиться с широким спектром именно профессиональных мнений, а также высказать ряд собственных соображений.

Только не подумайте, что сделана попытка противопоставить автора и учителей информатики, т.к. ваш покорный слуга в определенный период времени (нет, учителем не работалJ) обучал детей объектно-ориентированному программированию. Весёлое занятие - на голой консоли рассказывать ребятне про полиморфизм в С++! Это к тому, что я был абсолютно в теме.

Чего там только не было! И обучение COM-технологии в 8 классе, и игра в интеллектуально-алгоритмические паззлы, и виртуальные миры… аж завидно стало. Что выпало на долю нашего поколения в школьные годы? Программирование в кодах на MK-61? Извините, увлёкся. Зато сразу вспомнил, что такое "стек".

Одной из главных озвученных проблем, касающихся методологии преподавания и применимости языков программирования для обучения в школе, оказалось следующее: "Как нам преподавать школьникам ООП?" или даже в более жесткой постановке "Ни в коем случае нельзя преподавать ООП в школе!".

Мотивация

Не буду пересказывать смысл понятия "мотивация". На бытовом уровне все и так понимают, а в дебри психологии лезть неэффективно. Уж очень там много различных теорий и подходов. Но единственно близким мне методом "мотивирования" школьников является дать возможность сделать что-то. Нет, не что-то, а вполне конкретную "поделку".

У профессиональных педагогов есть даже такой термин "проектное обучение". Представить себе это легко, если подумать о курсовом или дипломном проекте. Прошу прощения, если у кого-то в памяти возникли негативные воспоминания.

Учителю информатики современные дети задают три вопроса:
- Вы научите нас взламывать сайты?
- Вы научите нас писать компьютерные игры?
- Сколько вы получаете?

Хотя бы один из этих трех вопросов нужно ответить прямо и максимально позитивно, чтобы сохранить авторитет. Я знаю нужный ответ на один из этих вопросов, но он связан с ООП.

Объектно-ориентированное мышление

Беглый взгляд на информацию по ссылкам "инкапсуляция" не вызвал чувство восторга, характерного в случае прочтения диспутов "какой язык программирования круче". Вот бы такую энергию - да в мирное русло! Вообще, читая объяснение ООП (в целом) и инкапсуляции (в частности), складывается впечатление, что нас "за уши тянут", а мы - упираемся. Нас уговаривают, а мы отказываемся. Нам показывают, что инкапсуляция полезна, а мы не доверяем. Нам нужны аргументы и факты.

Нам не нужны аргументы. Достаточно фактов.

Мы воспринимаем окружающий мир образами. Восприятие - биологическая функция. Формирование целостного образа объекта. Природа создала наш мозг объектно-ориентированным. Нас не надо учить объектно-ориентированному анализу. Нам только нужно показать графическую нотацию. Или рассказать, как использовать объектно-ориентированный язык для написания программ.

Инкапсуляция

Инкапсуляция - первая парадигма объектно-ориентированного подхода. Парадигма - совокупность идей и понятий, определяющих стиль программирования. Объектно-ориентированный язык (например, Delphi) позволяет использовать соответствующие парадигмы, т.е. писать в объектно-ориентированном стиле.

Можно уподобить парадигмы программирования правилам спортивной игры. Совокупность идей и понятий, определяющих стиль игры. Мяч, ворота, игровое поле. Или: ворота, клюшка, шайба, коньки. Класс, объект, поле, метод, свойство. Таковы понятия объектно-ориентированной игры мозга.

Я иду в школу. Я (объект) иду (вызов метода) в школу (параметр метода, другой объект).
Гоблин нападает на эльфа. Гоблин (объект) нападает (метод) на эльфа (параметр метода, другой объект).
Мы воспринимаем образы, мы мыслим образами, мы разговариваем образами. Что тут нужно объяснять?

Инкапсуляция - "в капсуле". В оболочке. Нет более бесхозных переменных и функций. Они находятся внутри какого-нибудь класса. Класс - та самая оболочка. Класс в программном коде отражает образ и содержит в себе составляющие объекта. Проекция образа в мозге на программный код.

Код на Delphi скажет лучше длинных предложений.

Goblin1.Attack(Elf1); // Гоблин № 1 атакует Эльфа №1

А что такое "гоблин"?

Из чего формируется образ "гоблина"? Сила атаки, здоровье, возможность перемещаться, возможность атаковать другие объекты. Две переменные и две функции, объединенные общим понятием. Что такое: объединены общим понятием ? С точки зрения написания объектно-ориентированного кода эти две переменные и две функции объявлены внутри класса.

В нашей голове нет бесхозных переменных (неких ячеек памяти с именем, способных хранить значение). Мы не думаем в категориях "функция" - набор действий, выполняемых над абстрактным набором входных параметров.

Мышление образами, программирование образами (классами и объектами) - более естественно, чем оперирование переменными и функциями. Нас так задумала природа.

А что такое "сокрытие"?

Странно, но тут единого мнения нет. Порой складывается впечатление, что сокрытие и есть инкапсуляция, а инкапсуляция нужна для сокрытия переменных или методов класса. Наверное, логично (исходя из значения слов) считать следующим образом.

Инкапсуляция - принцип программирования, когда переменные и функции (процедуры) помещаются в класс. Класс - ограниченная область программного кода, имеющая название, в которую помещены переменные и функции (процедуры). А смысл делать класс? Смысл только в том, чтобы максимально приблизить структуру программного кода к тем образам, которые у нас в голове. Как ни странно - для того, чтобы было проще программировать. Естественнее. Удобнее. Приятнее. Не надо ходить на руках или скакать на одной ноге. Делаем так, как нас задумала природа.

Поместили мы что-то в оболочку. В нашем случае переменные и функции (процедуры). Но часть из них нужно закрыть, чтобы не испортить работу. В автомобиле есть двигатель. Снаружи он закрыт капотом, а от салона изолирован различными панелями. Чтобы грязь не попадала. И чтобы пальцы в него не совали. Для блага же пассажиров. Двигатель находится в своем закрытом отсеке. А "наружу" выведены лишь кнопки, рычаги и педали. Их можно (и безопасно) трогать. С их помощью мы управляем автомобилем. Также и с классами. Часть переменных и функций скрываются во имя безопасности. Другая часть - специально делается доступной, открытой. Сокрытие - изоляция содержимого класса от внешнего мира (остального программного кода). Программист (создатель) класса сам должен решить, что спрятать для соблюдения безопасности, а что "вывести наружу" в качестве органов управления. Для Delphi часть содержимого класса прячется в разделе private (закрытый раздел), а часть - располагается под директивой public (открытый раздел).

Интерфейс

Интерфейс - открытая, доступная часть содержимого класса. Зачем часть содержимого класса открывается (делается доступной)? Чтобы с объектом можно было взаимодействовать. Взаимодействие с автомобилем выполняется посредством его интерфейса - руль, педали, рычаги, кнопки. Если неправильным образом спроектировать интерфейс, класс не будет работать. Если убрать педаль газа, то автомобиль не сдвинется с места. Однако выводить выхлопную трубу в салон тоже не стоит. Подобные рассуждения выглядят тривиально. Но это лишний раз доказывает всю тривиальность (в позитивном значении) сокрытия в рамках объектно-ориентированного подхода.

Смысл учить ООП

Здесь главное понять, что ООП - не цель обучения. Наверное, неправильно говорить "а теперь, дети, мы выучим ООП". Возвращаясь к теме "мотивации" и "программированию игр", следует отметить, что такая следующая цепочка рассуждений вполне эффективна:
"мотивация -> программирование игр -> изучение ООП". Таким образом, мы изучаем ООП для того, чтобы получить возможность программировать сложные задачи.

Мы думаем объектно-ориентированным образом, мы программируем объектно-ориентированным образом. Поэтому никогда другие языки программирования (логические, функциональные, например) не будут настолько естественными и, следовательно, широко распространенными. Изучать подобные языки аналогично познанию санскрита или арамейского.

Delphi навсегда

И вот тут сложно переоценить эффективность Delphi как языка программирования для преподавания информатики в школе. Естественно, на "драйве", на личностных качествах учителя можно пройти этап "переменных, циклов, массивов и функций". Но в какой-то момент нужно будет начать "доставать кроликов из шапки". И тут плавно классический Pascal начинает обрастать объектно-ориентированными возможностями, превращаясь в Delphi. Это касается и принципа визуального программирования, и возможностями использовать объектно-ориентированные парадигмы. Наверное, нет другой такой же эффективной среды обучения.

А то, что Delphi - профессиональный инструмент разработки коммерчески успешных приложений - дополнительный мотив. "Дети, мы работаем в профессиональной среде программирования":
http://www.embarcadero.com/rad-in-action/application-showcase

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года