
- •1.Объектно-ориентированные методы. Дайте определение объектно-ориентированного программирования, объектно-ориентированного проектирования и объектно-ориентированного анализа.
- •2. Сфера применения, преимущества и недостатки объектных методов.
- •3. Эволюция объектно-ориентированных языков программирования.
- •4. Эволюция методов объектно-ориентированного проектирования.
- •5. Объект как фундаментальное понятие объектно-ориентированных методов. Дайте определение состояния, поведения и уникальной идентичности объектов.
- •6. Уникальная идентичность объектов. Идентичность объектов Вселенной. Идентичность объектов в объектно-ориентированных моделях. Примеры.
- •7. Понятие класса в объектно-ориентированных методах. Дайте определение поведения и структуры класса. Понятие контракта и реализации класса. Обозначение класса в uml. Примеры.
- •17. Понятие полиморфизма. Классификация типов полиморфизма по Вегнеру.
- •25. Наследование интерфейсов. Преимущества и недостатки. Объясните реализацию интерфейсов на примере интерфейса iAny:
- •26 Сравнение абстрактных классов и интерейсов:
- •27 Принцип подстановки Барбары Лисков. «Правильное» построение иерархий классов:
- •28 Сравнение иерархий агрегации (is part of) и наследования (is kind of):
- •29 Делегирование методов (функциональный подход) и паттерн проектирования «Шаблонный метод»:
- •Применимость
- •30 Принцип инверсии управления в проектировании классов (IoC – Inversion of Control):
- •Управление доступом к членам класса. Члены-данные и члены-функции класса. Доступ к элементам класса. Синтаксис. Пример.
- •Специальные члены-функции класса. Синтаксис. Пример.
- •37. Конструктор класса. Виды конструкторов. Синтаксис. Пример.
- •38. Деструктор класса. Правила написания деструктора. Синтаксис. Пример.
- •39. Друзья класса. Дружественные функции и классы. Правила относительно друзей. Пример.
- •40. Оператор присваивания. Назначение. Синтаксис. Пример.
- •43. Статические (static) члены класса. Назначение. Синтаксис. Пример.
- •Проектирование классов с методами без побочных эффектов.
- •Проектирование по контракту: пред и постусловия, инвариант класса.
- •Понятие метаклассов.Поддержка метаклассов в различных языках программирования.
5. Объект как фундаментальное понятие объектно-ориентированных методов. Дайте определение состояния, поведения и уникальной идентичности объектов.
Объект обладает состоянием, поведением и идентичностью; структура и поведение схожих объектов определяет общий для них класс; термины "экземпляр класса" и "объект" взаимозаменяемы.
Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств.
Объекты без состояния (Stateless object) – только методы без полей (членов данных и или свойств). Неизменные объекты (Immutable object) – объект, состояние которого задаётся при создании и остаётся неизменным до конца существования объекта. Моносостояние объектов (Monostate) – множество объектов, разделяющих одно состояние. Состояние объекта представляет суммарный результат его поведения.
Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений.
Метод определяется как процедура или функция, которая изменяет состояние объекта или заставляет объект отправить сообщение (Специальные – финализаторы (конструкторы и деструкторы), селектор, модификатор, селектор+содификатор).
Описание (сигнатура) метода называется операцией. Операции показывают, какие сообщения объект может успешно обработать.
Идентичность (уникальная идентичность, объектная идентичность) - это такое свойство объекта, которое отличает его от всех других объектов
6. Уникальная идентичность объектов. Идентичность объектов Вселенной. Идентичность объектов в объектно-ориентированных моделях. Примеры.
Хошафян и Коуплэнд предложили следующее определение идентичности: "Идентичность - это такое свойство объекта, которое отличает его от всех других объектов".
При рассмотрении объектов вселенной можно сказать, что их идентичность гарантируется разным состоянием (например, два объекта не могут иметь одни координаты). Четырёхмерная система координат.
В большинстве же языков программирования для различения временных объектов их именуют или назначают UID. UUID уникально идентифицирует объект в пространстве и времени. Необходим для определения, сохранения состояния объекта. Например, при сохранении объекта на HD, для перемещения из оперативной памяти.
var O,O1,O2:TVehicle;
и где-то в программе:
O:=TVehicle.Create('ВАЗ-2101','115 АК',clGray);
O1:=TVehicle.Create('ВАЗ-2101','115 АК',clGray);
O2:=TVehicle.Create('ВАЗ-2101','115 АК',clBlack);
7. Понятие класса в объектно-ориентированных методах. Дайте определение поведения и структуры класса. Понятие контракта и реализации класса. Обозначение класса в uml. Примеры.
Понятия класса и объекта настолько тесно связаны, что невозможно говорить об объекте безотносительно к его классу. Однако существует важное различие этих двух понятий. В то время как объект обозначает конкретную сущность, определенную во времени и в пространстве, класс определяет лишь абстракцию существенного в объекте.
В контексте объектно-ориентированного анализа дадим следующее определение класса: Класс - это некое множество объектов, имеющих общую структуру и общее поведение.
Любой конкретный объект является экземпляром класса. Важно отметить, что классы, как их понимают в большинстве существующих языков программирования, необходимы, но не достаточны для декомпозиции сложных систем.
Объекты подвергаются воздействию или сами воздействуют на другие объекты.
Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Поведение объекта - это его наблюдаемая и проверяемая извне деятельность.
Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. Состояние объекта представляет суммарный результат его поведения.
Операцией называется определенное воздействие одного объекта на другой с целью вызвать соответствующую реакцию. Операции показывают, какие сообщения объект может успешно обработать. В объектно-ориентированных языках операции, выполняемые над данным объектом, называются методами и входят в определение класса объекта.
Метод определяется как процедура или функция, которая изменяет состояние объекта или заставляет объект отправить сообщение.
8. Фундамент объектно-ориентированных методов. Абстрагирование. Пример на С++.
Фундамент ООМ:
Абстрагирование
Инкапсуляция
Модульность
Иерархия
Типизация
Параллелизм
Сохраняемость
Полиморфизм
Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя
Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности поведения от несущественных. Барьер абстракции - когда интерфейс объекта содержит только существенные аспекты поведения и ничего больше. Принцип наименьшего удивления - абстракция должна выражаться в виде инвариантов, которые охватывают все поведение объекта, но не больше и не меньше, и не привносить сюрпризов или побочных эффектов, лежащих вне ее сферы применимости. Примеры: Абстракция сущности (Объект представляет собой полезную модель некой сущности в предметной области), Абстракция поведения (Объект состоит из обобщенного множества операций), Абстракция виртуальной машины (Объект группирует операции, которые используются более высоким уровнем управления), Произвольная абстракция (Объект включает в себя набор операций, не имеющих друг с другом ничего общего).
Cat = class
Private
Age:integer;
public
function GetAge:integer;
Procedure Caress; //гдадить
Procedure Feed; //кормить
End;
Cat = class
Private
Weight:real;
Species:^char;//вид
Age:integer;
public
function GetWeight:real;
function GetSpecies:^char;
function GetAge:integer;
procedure OpenCaseHistory;
// открыть историю болезни
9. Фундамент объектно-ориентированных методов. Инкапсуляция. Пример на С++.
Инкапсуляция — это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение; инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракции от их реализации.
Cat = class
private
CatColor: TColor;
Procedure Purr;// мурлыкать
Begin
DoPurr;
End;
protected
Procedure DoPurr;
public
Procedure Caress; //гдадить
begin
Purr;
End;
end;
11. Фундамент объектно-ориентированных методов. Иерархия. Виды иерархий. Пример на С++.
Иерархия - это упорядочение абстракций, расположение их по уровням.
Виды иерархий:
Одиночное наследование («is kind of»)
TA80Gas = class(TGas)
public
Constructor Create;
end;
TGas = class
protected
Price: Currency;
Name: String;
Public
Constructor Create;
function GetName: String;
function GetPrice: Currency;
end;
Множественное наследование («is kind of»)
TStudentMusicant = class ( TStudent, TMusicant);
Private
Public
End;
TStudent = class
Private
Public
End;
TMusicant = class
Private
Public
End;
Агрегация («is part of»)
TSale = class
private
function GetChange: Currency;
public
Date: TDateTime;
Price: Currency;
Paied: Currency;
Constructor Create(P,Pr:currency; D:TDateTime);
13. Фундамент объектно-ориентированных методов. Типизация. Языки со сильной и слабой типизацией. Типизация в C++.
Типизация — это способ защититься от использования объектов одного класса вместо другого, или по крайней мере управлять таким использованием.
Идея согласования типов занимает в понятии типизации центральное место. Деля расстояние на время, мы ожидаем получить скорость, а не вес. Конкретный язык программирования может иметь сильный или слабый механизм типизации, и даже не иметь вообще никакого, оставаясь объектно-ориентированным. В сильно типизированных языках все проверки типов данных выполняются на этапе компиляции, а не на этапе выполнения программы. С другой стороны, в Smalltalk типов нет: во время исполнения любое сообщение можно послать любому объекту, и если класс объекта не понимает сообщение, то генерируется сообщение об ошибке. C++ тяготеет к сильной типизации, но в этом языке правила типизации можно игнорировать или подавить полностью. Напротив, Ada и Object Pascal предоставляют сильную типизацию для примитивных типов.
Итак, сильная типизация заставляет соблюдать правила использования абстракций (предотвращается смешивание абстракций), поэтому она тем полезнее, чем больше проект. Однако, даже небольшие изменения в интерфейсе класса требуют перекомпиляции всех его подклассов.
14. Фундамент объектно-ориентированных методов. Связь типизации и времени связывания в различных языках программирования. Связывание и типизация в С++.
Типизация следит за соответствием типов, а связывание определяет время, когда имена связываются с типами. Статическое связывание (раннее связывание) означает, что типы всех переменных и выражений известны во время компиляции; динамическое связывание (позднее связывание) означает, что типы неизвестны до момента выполнения программы. Концепции типизации и связывания являются независимыми, поэтому в языке программирования может быть:
Типизация Связывание |
Слабая |
Сильная |
Раннее |
CLOS |
Ada |
Позднее |
Smalltalk, VBA |
C++, Delphi, VB, C# |
15. Фундамент объектно-ориентированных методов. Параллелизм. Поддержка параллелизма в языках программирования. Параллелизм в C++.
Есть задачи, в которых автоматические системы должны обрабатывать много событий одновременно. Поток управления - это фундаментальная единица действия в системе. Каждая программа имеет по крайней мере один поток управления, параллельная система имеет много таких потоков. Реальная параллельность достигается только на многопроцессорных системах, а системы с одним процессором имитируют параллельность за счет алгоритмов разделения времени.
Активные объекты имеют собственный поток (thread) управления. Мир может быть представлен, как совокупность активных и пассивных взаимодействующих объектов. Параллелизм - это свойство, отличающее активные объекты от пассивных. Параллелизм позволяет различным объектам действовать одновременно.
Многие современные операционные системы предусматривают прямую поддержку параллелизма, и это обстоятельство очень благоприятно сказывается на возможности обеспечения параллелизма в объектно-ориентированных языках.
В объектно-ориентированном проектировании есть три подхода к параллелизму.
Во-первых, параллелизм - это внутреннее свойство некоторых языков программирования(Ada , Smalltalk). Во-вторых, можно использовать библиотеку классов, реализующих какую-нибудь разновидность "легкого" параллелизма (при котором различные процессы имеют общее адресное пространство). Например, в Делфи параллелизм поддерживается на уровне библиотек, на уровне компилятора не поддерживается. Делфи поддерживает параллелизм и не ограничивает числа созданных потоков.
Наконец, в-третьих, можно создать иллюзию многозадачности с помощью прерываний.
16. Фундамент объектно-ориентированных методов. Сохраняемость. Поддержка сохраняемости в языках. Сохраняемость в С++.
Сохраняемость - Способность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства.
Любой программный объект существует в памяти и живет во времени.
Языки программирования, как правило, не поддерживают понятия сохраняемости; примечательным исключением является Smalltalk, в котором есть протоколы для сохранения объектов на диске и загрузки с диска. Однако, записывать объекты в неструктурированные файлы - это все-таки наивный подход, пригодный только для небольших систем. Как правило, сохраняемость достигается применением коммерческих ООБД.
Сериализация представляет собой процесс преобразования состояния объекта в форму, пригодную для сохранения или передачи.
При двоичной сериализации сохраняется правильность типов, что полезно для сохранения состояния объекта между разными вызовами приложения.Например, можно обеспечить совместный доступ к объекту для разных приложений, сериализовав его в буфер обмена. Объект можно сериализовать в поток, на диск, в память, передать по сети и т. д. При удаленном управлении сериализация используется для передачи объектов "по значению" с одного компьютера или домена приложения на другой.
При XML-сериализации сериализуются только открытые свойства и поля, а правильность типов не сохраняется. Этот метод полезен для предоставления или использования данных без ограничений работающего с ними приложения. Будучи открытым стандартом, XML привлекателен для совместного использования данных в Интернете.
Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.