
- •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) члены класса. Назначение. Синтаксис. Пример.
- •Проектирование классов с методами без побочных эффектов.
- •Проектирование по контракту: пред и постусловия, инвариант класса.
- •Понятие метаклассов.Поддержка метаклассов в различных языках программирования.
Применимость
Однократное использование инвариантной части алгоритма, с оставлением изменяющейся части на усмотрение наследникам.
Локализация и вычленение общего для нескольких классов кода для избегания дублирования.
Разрешение расширения кода наследниками только в определенных местах.
30 Принцип инверсии управления в проектировании классов (IoC – Inversion of Control):
Инверсия управления (Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах.
Принцип:
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций;
Абстракция не должна зависеть от реализации. Реализация должна зависеть от абстракции.
Традиционные методы разработки (например, процедурное программирование) имеют тенденцию к созданию кода, в котором высокоуровневые модули, как раз, зависят от низкоуровневых. Это происходит из-за того, что одна из целей этих методов разработки – определение иерархии подпрограмм, а следовательно и иерархии вызовов внутри модулей (высокоуровневые модули вызывают низкоуровневые). Именно это является причиной низкой гибкости и закостенелости дизайна. При верном использовании, ОО методики позволяют обойти это ограничение.
31. Параметрический полиморфизм. Параметризованные классы в С++. Примеры.
параметрический полиморфизм - возможность выбора аргументов в вызове функции из некоторого диапазона типов. Параметризированный класс (шаблон класса) даёт обобщённое определение семейства классов, использующее произвольные типы и константы. Параметризированный класс определяет общий класс, который может быть применён к изменяющимся типам данных; конкретный тип данных, над которым выполняются операции, передаётся в качестве параметра.
Пример:
См лекц
32. Параметрический полиморфизм. Полная специализация шаблонов в С++. Примеры.
Определяет частные случаи применения шаблонна на основе явных аргументов.
Пример:
См лекц
33. Параметрический полиморфизм. Частичная специализация шаблонов в С++. Примеры.
Частичная специализация. Даёт возможность компилятору определить наиболее подходящий (match) шаблон на основе аргументов.
Пример:
См лекц
Понятие класса в С++. Отличия класса от структуры. Понятие объекта класса. Синтаксис. Пример.
Аналогом класса является записи. Отличие класса от записи заключается в том, что записи не содержат описания прцедур и фукций. структуры не поддерживаю наследования.
TCustomer = Record firstName : string[20]; lastName : string[20]; address1 : string[100]; address2 : string[100]; address3 : string[100]; city : string[20]; postCode : string[8]; end;
Управление доступом к членам класса. Члены-данные и члены-функции класса. Доступ к элементам класса. Синтаксис. Пример.
Доступ к элементам класса.
public (открытый интерфейс класса) – размещенные под ним элементы доступны как данному классу, так и функциям других классов и вообще любым функциям программы через представитель класса.
published (публикуемый) содержит открытые свойства, которые появляются в процессе проектирования на странице свойств Инспектора Объектов и которые следовательно, пользователь может устанавливать в процессе проектирования.
private (закрытый доступ) элементы данных и элементы-функции, размещенные под ним, доступны только функциям-элементам данного класса.
protected (защищенный) – элементы в помеченном им разделе доступны не только в данном классе, но и для функций-элементов классов, производных от него.
Члены-данные – это такие же составные части класса. Стоит добавить следующее:
- Они могут быть перечислениями, битовыми полями, а также объектами ранее объявленных классов.
- Элемент данных класса не может быть представителем самого класса.
- Элемент данных класса может быть указателем или ссылкой на сам класс.
Члены-функции принадлежат своему классу, как и члены-данные. Они оперируют переменными-членами и определяют функциональные возможности класса. Функция-элемент класса объявляется внутри определения класса. Там же может быть расположено и оределение тела функции. В этом случае функцию-элемент называют встроенной и компилятор будет генерировать ее встроенное расширение на месте вызова. Если определение функции располагается вне тела класса, то к ее имени добавляется префикс, состоящий из имени класса и операции разрешения области действия. В этом случае функцию-элемент также можно определить как встроенную с помощью ключевого слова inline. Класс Point вместе с его реализацией:
Point = class
private
x,y:integer;
public:
function GetX:integer;
function GetY:integer;
Procedure SetPoint(k1,k2:integer);
Begin
X:=k1;
Y:=k2;
End;
End;
Function Point.GetX:integer;
Begin
Result:=x;
End;
Здесь функци SetPoint() определена как встроенные, а функции Get() определяются вне тела класса и не является встроенной.
Доступ к элементам класса можно получить с помощью оператора прямого доступа “.” Car.Color = “Green”; Car.Sell();