
- •Вопросы к итоговому государственному междисциплинарному экзамену по дисциплине «Объектно-ориентированное программирование»
- •Объектно-ориентированное программирование как методология разработки программ. Структура объектно-ориентированной программы. Привести пример описания объектного типа.
- •Соотношение основных понятий ооп. Привести примеры программного обращения или описания основных понятий ооп.
- •Принципы объектно-ориентированного программирования. Понятие инкапсуляции, наследования и полиморфизма. Привести примеры программного описания.
- •2 Основные характеристические свойства понятий
- •Простое и множественное наследование. Правила наследования. Привести пример простого наследования.
- •Скрытие данных в объектном типе. Назначение директив private и public. Привести пример управления доступом к элементам класса.
- •Понятие виртуального метода. Назначение и отличие виртуальных и динамических методов. Правила вызова виртуальных методов. Привести пример объявления виртуального метода.
- •Выделение памяти под экземпляр объекта. Привести пример объявления и реализации конструктора и деструктора.
- •Исключительные ситуации в терминологии ооп. Глобальная и локальная обработка исключений. Привести пример использования операторов контроля исключительных ситуаций при локальной обработке.
- •Понятие проекта Delphi. Состав проекта Delphi. Основные файлы проекта, их характеристика. Привести примеры программного кода основных файлов проекта.
Принципы объектно-ориентированного программирования. Понятие инкапсуляции, наследования и полиморфизма. Привести примеры программного описания.
Схематически соотношение основных понятий изображено на рисунке 2.
Рисунок 2 – Соотношение основных понятий ООП
В объектно-ориентированном программировании используется следующий формат записи работы с объектами:
ОБЪЕКТ.МЕТОД
ОБЪЕКТ.СВОЙСТВО.МЕТОД
2 Основные характеристические свойства понятий
Основными характеристическими свойствами понятий являются:
Инкапсуляция (encapsulation). Свойство классов объединять данные и методы обработки данных, а также скрывать внутреннюю программную реализацию самого класса.
Наследование (inheritance) - это возможность определения нового класса объектов как расширения уже существующего посредством сохранения полей и методов предка и описания лишь новых полей и методов.
Полиморфизм (polymorphism) - возможность существования в разных классах одинаково названных методов, но выполняющих различные функции.
Инкапсуляция. Комбинирование записей с процедурами и функциями, манипулирующими полями этих записей, формирует новый тип данных - объект.
Наследование. Определение объекта и его дальнейшее использование для построения иерархии порожденных объектов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.
Полиморфизм. Присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим.
Инкапсуляция - важнейший принцип объектно-ориентированного подхода
Означает сочетание структур данных с методами их обработки в абстрактных типах данных – классах объектов, т.е. термин «инкапсуляция» означает замыкание в общей оболочке Object…end всех составляющих описаний.
НАСЛЕДОВАНИЕ. Внутри категории "насекомые" имеется два подразделения: насекомые с видимыми крыльями и насекомые со спрятанными крыльями или вообще бескрылые. Среди крылатых имеется большее число категорий; мотыльки, бабочки, мухи и т.д. Каждая категория содержит большое число подкатегорий, а ниже этих подкатегорий может иметься даже еще большее число подкатегорий.
Этот процесс классификации называется таксономией. Это прекрасная начальная метафора для механизма наследования в объектно-ориентированном программировании. Таксономическая схема, иллюстрирующая процесс наследования изображена на рисунке 3.
|
Рисунок 3 - Таксономическая схема насекомых.
Важно помнить то, что если характеристика однажды определена, то все категории, расположенные ниже данного определения, содержат эту характеристику. Таким образом, как только вы определили насекомое, как члена отряда diptera (мухи), то вам не следует отмечать снова, что у мух имеется одна пара крыльев. Разновидность насекомых, которую мы зовем мухи, наследует эту характеристику от своего отряда.
ПОЛИМОРФИЗМ. Свойства различных объектов выполнять одно и тоже действие по своему, т.е. способность объектов реагировать на запрос (вызов метода) сообразно своему типу. При этом одно и тоже имя метода может использоваться для различных классов.
По определенным свойствам любого элемента определенной категории можно установить, что он принадлежит к этой категории. Сама категория определяется общими свойствами, которые имеют все экземпляры этой категории. Это можно пояснить на примере музыкальных инструментов. Музыкальные инструменты делятся на следующие категории: духовые, ударные и струнные. Все эти категории принадлежат к категории музыкальных инструментов. В свою очередь, категория музыкальных инструментов входит в категорию инструментов. На рисунке 4 эта структура категорий графически представлена в виде дерева.
Рисунок 4 – Структура категорий «Музыкальные инструменты»
Музыкальные инструменты имеют общие свойства, но каждый инструмент сам по себе обладает особыми свойствами, которые определяют его назначение и отличают его от других инструментов. По тому же принципу можно описать и классы в ООП. Определенный музыкальный инструмент некоторой категории, например моя труба или ваша труба, является объектом. Категория, к которой этот инструмент принадлежит, - это класс.
Инкапсуляция
Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект (object). Другими словами, объект - это то, что поддерживает инкапсуляцию.
Ниже прописан примерный код блока инкапсуляции в Delphi.
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
RadioButton1: TRadioButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
Наследование
Этот принцип означает, что если нужно создать новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости в переписывании заново уже существующих полей и методов. Можно объявить новый класс наследником.
TNewObject = class(TOldObject);
TNewObject является потомком или дочерним классом старого класса TOldObject, называемого предком или родительским классом, и добавляете к нему новые поля, методы и свойства - иными словами, то, что нужно при переходе от общего к частному.
Пример, иллюстрирующий наследование, представляет собой иерархия классов VCL.
В Object Pascal все классы являются потомками класса TObject.
Унаследованные от класса-предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов, то говорят, что они перекрываются. Ниже приведен текст стандартного механизма наследования Delphi
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
t:integer;
public
n,m,f:integer;
end;
Полиморфизм
Полиморфизм — это возможность использовать одинаковые имена для методов, входящих в различные классы. Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.
Рассмотрим пример представленный ниже. Пусть у имеется некое обобщенное поле для хранения данных - класс TFieid и два его потомка - для хранения строк и целых чисел:
type
TField = class //описание родительского типа
function GetData:string; virtual; abstract;
end;
TStringFieid = class(TField) //описание дочернего типа для строк
FData : string;
function GetData: string; override;
end;
TIntegerField = class(TField) //описание дочернего типа для целых чисел
FData : Integer;
function GetData: string;override;
end;
function TStringFieid.GetData;
begin
Result := FData
end;
function TIntegerField.GetData;
begin
Result:= IntToStr(FData);
end;
procedure ShowData(AField : TField);
begin
Form1.Label1.Caption:= AField.GetData;
end;
В этом примере классы содержат разнотипные поля данных FData сообщает о значении этих данных текстовой строкой (при помощи метода GetData). Внешняя по отношению к ним процедура ShowData получает объект в виде параметра и показывает эту строку.
Правила контроля соответствия типов (typecasting) языка Object Pascal гласят, что объекту как указателю на экземпляр объектного типа может быть присвоен адрес любого экземпляра любого из дочерних типов. В процедуре ShowData параметр описан как TFieid - это значит, что в нее можно передавать объекты классов и TStringField и TIntegerField и любого другого потомка класса TFieid. А метод GetData будет вызван тот, который соответствует классу фактически переданного объекта. Этот принцип называется полиморфизмом.