Вы на НеОфициальном сайте факультета ЭиП

На нашем портале ежедневно выкладываются материалы способные помочь студентам. Курсовые, шпаргалки, ответы и еще куча всего что может понадобиться в учебе!
Главная Контакты Карта сайта
 
Где мы?
» » » ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Реклама


ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Просмотров: 2357 Автор: admin

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

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

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

1)    находится в каком-то состоянии (например, собака имеет постоянные атрибуты: имя, породу; изменяемые атрибуты: возраст, состояние здоровья и т.д.);

2)    имеет определенное поведение (например, собака может охранять, проявлять дружелюбие, есть, спать и т.д.);

3)    существует во взаимодействии с окружающим миром (например, собака понимает команды и интонации хозяина, а также может поведением выразить свои требования к окружающим объектам).

Формальное определение объекта в ООП можно сформулировать так:

Объект – это сущность, способная сохранять свое состояние (информацию) и обеспечивающая набор операций (поведение) для проверки и изменения состояния объекта.

В определении объекта отчетливо видны две составляющие части:

1)    состояние (синонимы «свойства», «данные» или «атрибуты» объекта);

2)    методы (синонимы «набор операций» или «функции обработки данных» объекта).

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

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

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

В основе ООП находятся три базовые понятия, три кита объектного подхода:

·        инкапсуляция (Encapsulation);

·        наследование (Inheritance);

·        полиморфизм (Polymorphism).

Поясним эти базовые понятия на примере динамической системы с условным именем «Библиотека». В качестве объектов разной степени сложности в этой системе можно выделить: книги (журналы, сборники статей и пр.), люди (читатели и библиотекари), помещения, деньги, заказы и прочие.

Инкапсуляция. Первый кит в теории ООП – это инкапсуляция. Под инкапсуляцией понимается слияние данных и действий, которые можно выполнить над этими данными. Действия реализуются с помощью функций и называются методами. Такое слияние порождает абстрактные типы данных, называемые классами.

С точки зрения библиотеки характеристиками читателя как объекта являются:

·        Имя (фамилия, группа);

·        Список взятых книг.

Действия, которые может выполнить читатель:

·        Записаться и выписаться;

·        Взять книгу и сдать книгу.

Введя понятие объекта «Читатель», увидим, что он имеет свойства:

Имя (неизменяемый атрибут);

Список книг (изменяемый атрибут).

А также методы:

Записаться в библиотеку;

Выписаться;

Сдать книгу;

Взять книгу.

Процедурно-ориентированный подход 

Операции «Сдать», «Взять» изменяют список книг у данного читателя, значит, меняют его свойства. Операции «Записаться» и «Выписаться» порождают или уничтожают объект.

Аналогичным образом можно ввести множество объектов, характеризующих систему целиком: «Читатель», «Библиотекарь», «Книга», «Хранилище», «Картотека» и прочие, каждый со своими атрибутами и операциями.

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

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

Следовательно, класс – это тип объекта (абстрактный тип данных).

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

Классы наследуют свойства других классов и сами могут порождать новые классы. Например, «Библиотекарь» и «Читатель» имеют общие свойства, принадлежа классу «Человек». Атрибуты «Имя» и операция «Назвать имя» – свойства человека, значит, они унаследованы читателем и библиотекарем от класса «Человек».

С другой стороны, для класса «Читатель» можно определить подклассы:

Студент;

Преподаватель.

Объектно-ориентированный подход  

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

В объектной модели это подклассы «Читатель – студент» и «Читатель – преподаватель». Оба они наследники класса «Читатель», значит, имеют общий набор операций, но и отличия в атрибутах и методах. Дальнейшая разработка потребует введения дополнительных атрибутов для порожденных классов.

Полиморфизм. Третий кит ООП – это полиморфизм (многоформенность, изменяемость). Под полиморфизмом понимается способность объекта реагировать на запрос сообразно своему типу. Или это свойство, которое позволяет использовать одно и то же имя для решения одинаковых внешне, но технически разных задач.

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

Отличие ООП от традиционного модульного подхода

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

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


Информация

Комментировать статьи на нашем сайте возможно только в течении 60 дней со дня публикации.

Популярные новости

Статистика сайта



Rambler's Top100



 
Copyright © НеОфициальный сайт факультета ЭиП