Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВВЕДЕНИЕ В ОБЪЕКТНО Ориентированное программиро...docx
Скачиваний:
19
Добавлен:
29.08.2019
Размер:
1.01 Mб
Скачать

ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

- эволюция разработки программного обеспечения

- технологии программирования

- основные концепции объектно-ориентированного программирования

реализация объектно-ориентированного подхода

- инкапсуляция. свойства

- конструкторы объектов

- деструкторы объектов

- наследование, агрегация

- полиморфизм, виртуальные и динамические методы

- абстрактные методы

- перегрузка методов

- события и делегирование

- приведение объектных типов, операторы IS и AS

- области видимости

- перекрытие и переогределение свойств

- абстрактные и виртуальные базовые классы, «друзья» классов

- внутреннее устройство объекта

- указатели на класс

объектно-ориентированное программирование в borland delphi

- применение объектно-ориентированного программирования

- иерархия библиотечных классов в borland delphi

- создание компонентов в среде delphi

- создание свойств, событий и методов компонентов

- обработка сообщений windows

- связь событий delphi и сообщений windows

- обработка исключительных ситуаций

- новое в языке object pascal

Основы объектно-ориентированного анализа и проектирования Введение в объектно-ориентированное программирование Эволюция разработки программного обеспечения

В момент появления первых ЭВМ предметом внимания была прежде всего аппаратура, особенности архитектуры ЭВМ. И программы разрабатывались в двоичных кодах. Со временем вычислительные машины становились мощнее и надежнее. Одновременно с этим возрастала сложность решаемых с их помощью задач, что в свою очередь вызвало совершенствование технологий разработки программ. Важнейший прорыв произошел в конце 50-х годов, когда появились языки программирования высокого уровня: Фортран, Алгол и др. Их появление в свою очередь позволило решать более сложные задачи. Требования возросли, что опять потребовало совершенствования технологий и т.д. Этот процесс продолжается непрерывно и не может иметь завершения.

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

• Первое поколение (1954-1958) FORTRAN I, ALGOL-58, Flowmatic, IPL V

• Второе поколение (1959-1961) FORTRAN II, ALGOL-60, COBOL, Lisp

• Третье поколение (1962-1970) PL/1, ALGOL-68, Pascal, Simula

• Четвертое поколение (1970-1980) Ada, С++

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

Во втором поколении языков высокого уровня основной тенденцией стало развитие алгоритмических абстракций. В это время мощность компьютеров быстро росла. А компьютерная индустрия позволила расширить области их применения. Уже не только наука, но и бизнес. То есть уже не математические расчеты, а обработка разнородных данных, скажем хранение Обработка анкет сотрудников. В этом поколении появились: подпрограммы, типы данных, работа с файлами.

В конце 60-х с появлением транзисторов, а затем интегральных схем, стоимость компьютеров резко снизилась, а их производительность росла почти экспоненциально. Появилась возможность решать все более сложные задачи, но это требовало умения обрабатывать самые разнообразные типы данных. Такие языки, как например Pascal стали поддерживать абстракцию данных. Программисты смогли описывать свои собственные типы данных.

70-е годы знаменовались всплеском активности создания новых языков. Было создано около 2-х тысяч языков и их диалектов. Вызван этот всплеск тем, что существовавшие к тому времени языки были очевидно неадекватны требованиям написания крупных программных систем. Лишь немногие из этих языков смогли выжить, однако многие их принципы нашли отражения в новых версиях более ранних языков. Именно в этом поколении появились языки, называемые объектными и объектно-ориентированными.

Технологии программирования

Под технологией программирования понимается путь от задачи до ее воплощения в программе. Первой законченной технологией программирования является структурное программирование. Создателем структурного подхода считается Э. Дейкстра. По своему подходу этот метод соответствует к третьему поколению языков программирования высокого уровня. Ранее он очень широко применялся в практическом программировании и по сей день не потерял своего значения для определенного класса задач. Структурный подход базируется на двух основополагающих принципах: первый - это использование процедурного стиля программирования, второй - это последовательная декомпозиция алгоритма решения задачи сверху вниз. Задача решается применением последовательности действий. Первоначально задача формулируется в терминах входа-выхода. Это означает что на вход программы подаются некоторые данные. Программа работает и выдает ответ. После этого начинается последовательное разложение всей задачи на более простые действия. Например, если нам необходимо написать программу поиска телефона в телефонной книге, то вначале мы ее запишем следующим образом:

Прочитать фамилию

Сверить фамилию с имеющимися в телефонной книге Если фамилия есть в телефонной книге, напечатать номер телефона В противном случае напечатать «Телефона нет»

Очевидно, что такая запись один к одному отображается в программу на языке высокого уровня, например на Паскале:

Program phone;

Var

Name: tName;

Phone: tPhone;

Begin

ReadName(Name);

If (CheckDatabase(Name, Phone))

Then Writeln(Phone)

Else Writeln(‘Телефона нет’);

End.

Эта программа использует процедуру ReadName для чтения фамилии и процедуру CheckDatabase для поиска номера телефона в базе данных. Теперь мы можем продолжить процесс составления программы для процедур следующего уровня: чтения фамилии и поиска номера телефона. Они в свою очередь также могут включать в себя процедуры следующего уровня вложенности.

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

Каждый из прямоугольников соответствует объекту реального мира, обладает своим поведением, своим состоянием и идентичностью, т.е. его можно однозначно выделить из окружающего. Например объект - склад. Его можно отделять от всего прочего - идентичность Он может выдавать и принимать заготовки - поведение. Он хранит некоторое количество заготовок — состояние. Станки способны обрабатывать заготовки за конечное время, и это время является их характеристикой - т.е. состоянием. В процессе обработки часть заготовок превратил в детали, часть будет испорчена и станет браком - поведение объекта «станок». При разработке программы, моделирующей подобный производственный участок структурный' подход применим очень плохо. Необходим другой подход - а именно объектно-ориентированный. В его основе лежит представление о том, что программу необходимо рассматривать как совокупность взаимодействующих друг с другом объектов. Этот подход соответствует четвертому -новейшему поколению языков программирования высокого уровня. В настоящее время используются оба подхода и структурированный н объектно-ориентированный. То, какой именно применять зависит от решаемой задачи. Рассмотрим пример - программа моделирующая следующую систему: на спутнике установлена камера, она снимает поверхность земли и передает на землю изображение.

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

С другой стороны каждый из этих блоков можно рассматривать как объект, обладающий идентичностью, состоянием и поведением. Например «шумы радиолинии» - это модель физического процесса. Этот блок может быть однозначно отделен от прочих — т.е. обладает идентичностью. Его поведение - получать информацию, искажать ее в зависимости от заложенных характеристик и выдавать дальше. Его состояние - это характеристики искажения. «Компрессия» и «Декомпрессия» - это объекты, описывающие виртуальные машины, выполняющие некоторые преобразования. Поведение - выполнить преобразование. Состояния - параметры алгоритмов преобразования. Общие рекомендации относительно того, какую технологию выбрать, заключаются в следующем: сначала выбирается объектно-ориентированный подход а далее, если делается вывод что он явно избыточен, может быть выбран структурный.