Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Экзамен.docx
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
115.82 Кб
Скачать

6. Класс. Отношения между классами. Классификация. Методы классификации.

Класс – своеобразный шаблон объекта. Отношение между классами рассматривают по двум причинам: отношения классов могут указать на вид общности и могут влиять на семантику связи между ними.

Существуют 3 основных типа отношений между классами:

  1. разновидность – отражает степень общности;

  2. составная часть – отражает агрегирование объектов;

  3. ассоциативность – отражение смысловых связей классов, не связанных никак иначе.

О и ОО языки реализуют механизмы этих трех типов следующим образом: посредством наследования, использования, наполнения и на основе понятия метакласса.

В языке C++ метод абстрактного класса может быть заблокирован с помощью его инициализации в подкласс нулевым или пустым значением. Такой метод называется чисто виртуальной функцией.

Самый общий класс в структуре классов называется базовым. В зависимости от типа языка их бывает несколько и они могут быть классифицированы. Для любого класса различают 2 вида пользователей: экземпляры данного класса и экземпляры производных подклассов.

Множественное наследование наиболее полно реализовано в C++, CLOS. Разработка структуры классов на основе множественного наследования – сложная задача, т.к. необходимо согласовать взаимодействие объектов разных классов. Проблемы: повторное наследование, наличие неопределенности объектов различных суперклассов. Отношение использования между классами в двух вариациях:

- когда в интерфейсной части одного класса должен быть использован другой класс;

- другой класс используется в реализации.

Виды отношения использования:

- 1:1;

- один ко многим.

7. Вопросы качества абстракция и выбора операций при создании классов и объектов.

Связь класса и объекта проявляется на этапе ООА при решении двух основных задач: выявление классов и объектов и построение структур, обеспечивающих их взаимодействие.

Критерии оценки качества классов и объектов:

- взаимосвязанность (степень глубины связи между отдельными модулями);

- связанность (степень взаимосвязи между отдельными элементами отдельного модуля; наиболее желательной является функциональная связанность);

- достаточность;

- полнота (наличие в интерфейсной части класса всех необходимых характеристик абстракции);

- простота, безызбыточность.

Т.обр., цель ООА – отождествление сущности реального мира с абстракциями, которые используются при построении информационной системы.

8. Прототипы функций. Перегрузка функций. Значения формальных параметров по умолчанию.

struct Data

{

int d, m, y;

};

void set(Data&, int, int, int);

void add_y(Data&, int);

void add_m(Data&, int);

В данном примере нет явной связи между типом данных и функциями. Такую связь можно установить, объявив функции компонентами структуры:

struct Data

{

int d, m, y;

void set(int, int, int);

void add_y(int);

};

В данном примере в структуре Data функции set и add_y были объявлены с помощью прототипов.

Прототип функции – объявление функции, которое не содержит тело функции, но указывает имя функции, арность, типы аргументов и возвращаемый тип данных, в то время как определение функции описывает, что именно делает функция, прототип функции может восприниматься как описание её интерфейса.

Объектный подход позволяет определить новые методы со старыми именами, переопределив тем самым методы класса родителя. Т.е. перегрузка процедур и функций – возможность использования одноименных подпрограмм в языках программирования.

Функции могут иметь параметры по умолчанию. В таком случае, при объявлении параметры, имеющие значение по умолчанию, записываются в конце. Рассмотрим примеры на языке C++. Пусть функция med подсчитывает среднее арифметическое между оценками студента.

float med(int a, int b=50, int c=50)

{

return (a+b+c)/3;

}

В данном примере параметры b и с по умолчанию имеют значение 50. Исходя из этого, при вызове функции в виде med(a) параметры b и c будут иметь значение 50, а при вызове med(45,45) параметры a и b будут иметь значение 45, параметр с будет равен 50. Вызов med(45,,45) будет являться ошибкой.