
- •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) члены класса. Назначение. Синтаксис. Пример.
- •Проектирование классов с методами без побочных эффектов.
- •Проектирование по контракту: пред и постусловия, инвариант класса.
- •Понятие метаклассов.Поддержка метаклассов в различных языках программирования.
Специальные члены-функции класса. Синтаксис. Пример.
КОНСТР
ДЕСТР
37. Конструктор класса. Виды конструкторов. Синтаксис. Пример.
Конструктором называется открытая функция-член, которая вызывается в момент создания объекта данного класса. Имеет то же имя, что и сам класс. Если конструктор не объявлен, то компилятор сам создает конструктор по умолчанию, т.е. конструктор без параметров. При этом созданный компилятором конструктор по умолчанию проинициализирует все данные-члены класса нулями. В задачу конструктора входит создание экземпляра класса и выполнение операторов, содержащихся в его теле. Назначение кода внутри конструктора – инициализировать только что созданный экземпляр объекта. Синтаксис реализации конструктора
Type <имя класса>=Сlass[{Имя родительского класса>)] . . . Constructor Имя конструктора>[(<параметры>)]; [Override;] Destructor <имя деструктора>[(<параметры>)}; End;
Начиная с класса TComponent конструктор Create стал виртуальным и при его переопределении необходимо указывать слово-директиву Override.
При наследовании во время создания объекта производного класса конструкторы будут вызываться в следующем порядке: конструктор базового класса, конструктор производного класса. При этом у базового класса будет вызван конструктор по умолчанию. Для того чтобы вызвать конструктор базового класса с параметрами и тем самым передать ему эти параметры необходимо при объявлении конструктора производного класса использовать следующую конструкцию: конструктор_произв_класса (список_парам): конструктор_баз_класса (список_парам) {//тело конструктора производного класса}.
38. Деструктор класса. Правила написания деструктора. Синтаксис. Пример.
Реализация наследуемых деструкторов Если использовать механизм наследования деструкторов, то можно упростить задачу уничтожения экземпляров класса, таким образом, чтобы каждый раз заботиться лишь об уничтожении тех полей, которые были добавлены в данном классе. Всю работу по очистке наследуемых полей можно возложить на наследуемые деструкторы. Для вызова наследуемого деструктора необходимо используется ключевое слово Inherited.
Синтаксис объявления наследуемого деструктора следующий:
Destructor <имя класса>.<имя деструктора>[(<параметры>)}; [<блок объявлений>] Begin <уничтожение собственных полей> Inherited <имя деструктора>[{<параметры>)]; End;
Примечания: • Внутри деструктора есть доступ не только к обычным идентификаторам, но и к полям экземпляра класса, инкапсулированным при его определении. • Исполняемые операторы деструктора должны позаботиться обо всех операциях очистки, необходимых для уничтожения экземпляра класса. Код деструктора должен уничтожить все внутренние экземпляры объектов и освободить динамическую память, которая была зарезервирована во время существования экземпляра класса. Однако нет необходимости явно устанавливать в нулевые значения поля прямого доступа. • Необходимость в объявлении деструкторов с параметрами возникает очень редко. Обычно все, что нужно сделать деструктору – уничтожить экземпляр класса, и вся необходимая для этого информация и так доступна ему. • Если у класса нет полей косвенного доступа, то деструктор можно не создавать для такого пользовательского класса.
Перегрузка - возникает в случае, если имеется несколько методов с одинаковыми именами, но разными параметрами (типом или количеством) и возвращаемым типом результата
Переопределение - используется при замене метода класса-родителя в классе-потомке методом с такими же параметрами и таким же типом возвращаемого результата