Объектно-ориентированное программирование
с примерами на Object PASCAL
(72 часа)
Вадим Валериевич Монахов, доцент кафедры вычислительной физики СпбГУ
Введение
1.1. Основной принцип структурного программирования
Структурное программирование — это метод программирования, опирающийся на структурную организацию программы.
Основной принцип структурного программирования - обеспечить максимальное соответствие структуры текста программы логике решаемой проблемы.
Способы реализации основного принципа структурного программирования:
1) Структурируемости и читаемости текста программы – отступы, обозначения, группировка частей текста.
2) Отлаживаемость программы – пригодность конструкций языка к отладке. В значительной степени связана с особенностями типизации данных. Наличие жесткого контроля типов с диагностикой ошибок при трансляции программы. Другая важная часть – наличие интегрированной среды разработки.
3) Инкапсуляция данных — наличие структурных типов данных (массивы, записи, строки, множества, файловые типы, потоки и т. п.) с возможностью оперирования переменной структурного типа как единым целым.
4) Инкапсуляция программного кода - блоки разных уровней, модули, пакеты и т. п. с особыми правилами прозрачности и интерфейсами между ними.
5) Инкапсуляция программного кода и данных во время выполнения программы, со специальными ограничениями доступа, правилами прозрачности, интерфейсами, диагностикой ошибок во время выполнения программы. Примеры: обработка исключительных ситуаций во время выполнения, обработки событий, подпроцессы.
Примеры неструктурных языков:
Ассемблер — не удовлетворяет:
"Читаемость" — из-за плохой читаемости программы, отсутствия структурируемости текста; "Отлаживаемость" — полное отсутствие; "Структурные типы" — полное отсутствие; "Инкапсуляция кода" — полное отсутствие; "Инкапсуляция времени выполнения" — полное отсутствие.FORTRAN — не удовлетворяет:
"Читаемость" — из-за необходимости часто использовать оператор goto, неразвитости блочной организации текста программы, позиционной зависимости кода; "Отлаживаемость" — из-за отсутствия пользовательских типов и, что более критично — слабого контроля типов. С этим связано существование недиагностируемых ошибок типа DO7I=1.10, когда в операторе цикла вместо "," поставили ".", в результате чего "Voyager" пролетел мимо Венеры; "Структурные типы" — отсутствие структурных типов данных (кроме массивов); "Инкапсуляция кода" — почти отсутствует, так как нет модулей, вложенности блоков программного кода (подпрограммы не могут быть вложены друг в друга) и крайне плохо организованных интерфейсов между блоками кода (операторы block data и т. д.); "Инкапсуляция времени выполнения" — полное отсутствие.В FORTRAN-77 появились возможности, преодолевающие ряд перечисленных недостатков. FORTRAN-99 пошел еще дальше, однако многие недостатки сохранялись, а новые возможности сделали его достаточно сложным и непоследовательным.
Примеры структурных языков:
С:
"Читаемость" — удовлетворительно (не очень хорошая читаемость из-за наличия макросов машинной ориентации языка с выражениями типа y+=x ); "Отлаживаемость" —удовлетворительно не очень хороший синтаксис языка, поэтому много ошибок не отслеживается при компиляции (например, "," вместо ";" в функции "for", а также ошибки, возникающие из-за правил автоматического приведения типов). Наличие указателей с соответствующими правилами присваивания часто приводит к фатальным ошибкам. "Структурные типы" —хорошо; "Инкапсуляция кода" —хорошо. Не очень удачно организована модульность; "Инкапсуляция во время выполнения" — полное отсутствие.C++:
То же, что C, 2) несколько усовершенствован (однако переусложнен). Имеется объектная модель, расширяющая 1), 2), 3), 4). Правда, имеется дефект в ограничении правила видимости объектов (правила видимости могут быть несанкционированно изменены).
5)"Инкапсуляция времени выполнения" — наличие обработки исключительных ситуаций (exceptions).
PASCAL:
"Читаемость" — хорошо; "Отлаживаемость" — хорошо. Проблемы: правила автоматического приведения типов, работа с указателями, явное приведение типов, вариантная запись; "Структурные типы" — хрошо; "Инкапсуляция кода” —удовлетворительно: отсутствуют модули (в стандарте языка) и пакеты; Turbo Pascal лучше удовлетворяет "4)", хоть и имеет не очень продуманные интерфейсы и правила видимости между модулями; "Инкапсуляция времени выполнения" — полное отсутствие.Object Pascal (начиная с Delphi 2.0) (без явного применения объектов):
Имеется объектная модель, расширяющая 1), 2), 3), 4). Кроме того, начиная с Delphi 3.0 появились пакеты.
5)"Инкапсуляция времени выполнения" —
а) наличие обработки исключительных ситуаций (exceptions);
b) работа с подпроцессами (threads).
Java:
"Читаемость" — удовлетворительно. Недостатки: переусложненность ряда простых в принципе действий из-за чрезмерного увлечения объектным подходом (например, при действиях с файлами и строками); "рецидивы", ведущие происхождение от С (операнды типа y+=x, функции for,?: и т. п. Зато макросы отсутствуют!). Наличие большого числа маленьких подпрограмм (классов) без возможности их объединения в единое целое. "Отлаживаемость" —отлично, за исключением правил автоматического приведения типов (указатели ликвидированы!); "Структурные типы" —хорошо; "Инкапсуляция кода" —хорошо. Сложность: отсутствие вложенных программ. В некоторой степени решено, начиная с Java 1.1 – вложенные классы; "Инкапсуляция во время выполнения" — хорошо. Имеются: обработка исключительных ситуаций; работа с подпроцессами (threads).JavaScript/Jscript
1)”Читаемость” – удовлетворительно ( С-образен);
2)”Отлаживаемость” – неудовлетворительно (свободная типизация и при этом слабая типизация), крайне плохая диагностика ошибок;
3)”Структурные типы” – хорошо (благодаря объектной модели);
4)”Инкапсуляция кода” – удовлетворительно (нет модулей, пакетов; вложенные функции появились только в JavaScript 1.2);
5)”Инкапсуляция времени выполнения” – удовлетворительно для JS в IE4 и последующих (есть обработка исключений), неудолетворительно – для других бразеров.
1.2. Основные задачи структурного программирования
Структурное программирование предназначено для решения трех основных задач:
Повышение эффективности разработки программ: а) увеличение скорости написания программ; б) увеличение качества их сопровождения (внесения усовершенствований, исправления ошибок); в) уменьшение стоимости разработки; г) обеспечение возможности групповой работы с проектом; д) обеспечение возможности проектирования ПО (software engineering). Повышение надежности работы программ. Никому не нужна дешевая, мгновенно написанная и занимающая мало ресурсов программа, которая работает очень быстро, но с ошибками. Из программистского фольклора: “Беремся написать вам ПО : 1. Бысро 2.дешево 3.надежно. – Два из трех. Повышение эффективности работы программ: увеличение скорости их выполнения, расширение функциональных и сервисных возможностей программ, а также уменьшение их ресурсоемкости (размеров программного кода, объема используемой оперативной и дисковой памяти).Одним из важнейших критериев решения перечисленных задач является коэффициент повторного использования программного кода, т. е. многократного использования одного и того же куска программы. Преимущества процедур, функций и библиотек подпрограмм, и в особенности объектного программирования, в значительной степени связаны с увеличением коэффициента повторного использования кода.
1.3. Основные принципы объектно-ориентированного программирования (ООП)
ООП — это метод программирования, развивающий принципы структурного программирования и основанный на следующих абстракциях данных:
I. Инкапсуляция: объединение данных с процедурами и функциями в единый блок программного кода (данные и методы работы с ними рассматриваются как поля объекта).
II. Наследование (наличие экземпляров класса; потомки, прародители, иерархия).
III. Полиморфизм (единое имя для некого действия, которое по-разному осуществляется для объектов иерархии).
Компонентное программирование:
Реализация объектов в виде независимо распространяемых исполняемых модулей. Известны 2 типа компонентов:
А) Компоненты конкретного языка программирования (Visual BASIC, Object PASCAL, Java). Предназначены преимущественно для поддержки средств визуального проектирования
Б) Компоненты, поддерживаемые на уровне ОС (компоненты Activex, .NET).
Основы языка Object PASCAL.
2.1. Алфавит языка PASCAL. Идентификаторы.
Основной алфавит языка PASCAL состоит из латинских букв и цифр.
Буквы:
ABCD...XYZ — заглавные (прописные),
abcd...xyz — строчные,
а также знак _ — подчеркивание.
Цифры:
0123456789
Идентификаторы: это имена переменных, процедур, функций меток и т. д. Они начинаются с буквы, далее — произвольная комбинация букв и цифр. Исключение составляют метки, для которых идентификатором может служить положительное целое число. Максимально разрешенная длина имени зависит от реализации и, как правило, не менее 8 символов. В идентификаторах можно применять только символы основного алфавита.
Замечание:
а) Компиляторы PASCAL не являются регистро-чувствительными (case sensitive), т. е. не различают прописные и строчные буквы, т. е. I1 и i1 — одинаковые идентификаторы. Это отличает PASCAL от C, C++, JavaScript и Java, которые регистро-чувствительны. Visual BASIC занимает промежуточное положение: его среда разработки автоматически исправляет регистр для Visual BASIC вопрос о регистро-чувствительности не имеет смысла.
б) Национальные алфавиты можно использовать только в строковых выражениях.
2.2. Простые и составные специальные символы, используемые на ПК.
Перечисленный ниже набор несколько расширяет стандарт PASCAL, однако на ПК является стандартом de facto.
Простые специальные символы:
+ | Плюс – “сложение” |
– | Минус – “вычитание” |
* | Звездочка – “умножение” |
/ | косая черта (slash) – “деление” |
= | Равно (Замечание: в C-образных языках в качестве этого знака используется = =) |
> | Больше |
< | Меньше |
[ | левая квадратная скобка – открытие индекса массива |
] | правая квадратная скобка – закрытие индекса массива |
( | левая круглая скобка |
) | правая круглая скобка |
{ | левая фигурная скобка – открытие комментария |
} | правая фигурная скобка – закрытие комментария |
@ | коммерческое a (“эт”) – знак адресации |
. | Точка |
, | Запятая |
: | Двоеточие |
; | точка с запятой |
' | апостроф (одиночная кавычка) – открытие и закрытие строки символов |
" | двойные кавычки – не имеет специального назначения |
# | номер (hash) - не имеет специального назначения |
$ | знак доллара – используется в 16-ричной нотации чисел |
\ | обратная косая черта (backslash) - не имеет специального назначения |
^ | "шляпка" – используется для работы с указателями |
~ | Тильда - не имеет специального назначения |
знак пробела (невидимый) | |
знак табуляции (невидимый) |
Составные специальные символы:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |


