- •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) члены класса. Назначение. Синтаксис. Пример.
- •Проектирование классов с методами без побочных эффектов.
- •Проектирование по контракту: пред и постусловия, инвариант класса.
- •Понятие метаклассов.Поддержка метаклассов в различных языках программирования.
39. Друзья класса. Дружественные функции и классы. Правила относительно друзей. Пример.
Дружественная функция – функция, которая не является членом класса, но имеет доступ к его закрытым членам. Для того, чтобы указать что функция является другом класса, надо добавить в класс сигнатуру этой функции с модификатором friend: class myclass {int n; public: friend int factor();}; int factor() {myclass obj; obj.n = 100;}. Из примера видно, что функция может получить доступ к внутренним члена класса только через конкретный объект класса.
Правила: дружественная функция не член класса, т.е. она не может вызываться через имя объекта; дружественная функция не наследуется; функция может быть дружественной по отношению к нескольким классам; функция может быть членом одного класса и дружественной к другому классу: class A {public: int myfunc();}; class B {public: friend int A::myfunc();};
Преимущества: используется для перегрузки левосторонних операторов (кроме оператора присваивания) и операторов ввода-вывода; помогает получить доступ к закрытым членам нескольких классов.
40. Оператор присваивания. Назначение. Синтаксис. Пример.
используется параметр-ссылка. Это необходимо для предотвращения создания копии объекта, стоящего справа от оператора. Причем опасность этой ситуации не столько в неэкономном использовании памяти. Если объект содержит внутри себя указатель, то если будет создана копия объекта, то при выходе из функции копия будет разрушена, а следовательно будет разрушен и скопированный указатель. Однако память по этому указателю все еще необходима объекту, который является аргументом. Во-вторых, сам оператор возвращает ссылку на объект, а не сам объект. Смысл в том же, т.е. при вызове может быть создана копия объекта, которая будет разрушена, как только завершится работа с оператором.
Если несколько указателей указывают на 1 объект, то высвобождения памяти стоит вообще избегать.
43. Статические (static) члены класса. Назначение. Синтаксис. Пример.
Можно объявить элемент класса (данные или функцию) как статический. Статический элемент данных является по существу глобальной переменной с областью действия в классе и разделяется всеми представителями класса. Он только один, вне зависимости от того, сколько объектов имеет класс. На самом деле статический элемент данных существует даже в том случае, когда никаких представителей класса не создано. Помимо объявления в определении класса, статический элемент данных должен еще и определяться вне класса или в инициализаторе конструктора: class SomeClass {static int iCount;}; int SomeClass::iCount = 0;
Обращаться к открытым статическим элементам класса можно либо через любой его представитель операциями “.” и “->”, либо с помощью операции разрешения области действия (SomeClass::iCount). Последний способ предпочтительнее, так как показывает, что элемент не связан с конкретным объектом.
Статические элементы-функции. Функция класса, объявленная с модификатором static, не связывается ни с какими его конкретными представителями. Другими словами, ей не передается указатель this в качестве скрытого параметра. Это означает, что: статическая функция-элемент может вызываться, даже если никаких объектов не создано; статическая функция-элемент может обращаться только к статическим элементам данных класса и вызывать только другие статические функции-элементы класса; такая функция не может быть объявлена виртуальной.
Объекты без соостояние (stateless), с неизменным состоянием (immutable), моностостоянием (monostate) см вопрос 5
45. Неизменяемые (immutable) члены-функции класса. Назначение. Проблемы и решения. Пример на С++.
В некоторых случаях требуется использовать классификатор const для функций-членов класса, чтобы показать, что она не должна изменять состояния класса (например: int get_value() const {};). Но иногда все-таки приходится снимать идентификатор const для заполнения некоторых членов путем приведения типов const_cast<>(). Для того чтобы явно указать какие члены может изменять функция с идентификатором const необходимо пометить эти поля идентификатором mutable: class Date { mutable bool cache; void get_cache() const {… cache = true; …}};
Framework.
В делфи нет никаких синтаксических структур чтобы пометить что члены-функции не изменяются.(не поддерживает)
