Занятие IV.ppt
- Количество слайдов: 39
РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВ КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ОСНОВЫ РАЗРАБОТКИ ПРОГРАММНЫХ СИСТЕМ ООП: классы и объекты
Сущность класса • Абстракция существенного в объекте • Некоторое множество объектов, имеющих общую структуру и общее поведение • Контракт между абстракцией и теми, кто использует её • Объект является экземпляром класса
Сущность класса • Классы — это самые важные строительные блоки любой ООсистемы. Они представляют собой описание совокупности объектов с общими атрибутами, операциями, отношениями и семантикой. Класс реализует один или несколько интерфейсов. • Классы используются для составления словаря разрабатываемой системы. Это могут быть абстракции, являющиеся частью предметной области, либо классы, на которые опирается реализация. • Хорошо структурированные классы характеризуются четкими границами и помогают формировать сбалансированное распределение обязанностей в системе.
Интерфейс класса • Выражает обязательства класса • Операции, поддерживаемые экземплярами классов • Части интерфейса: – открытая(public) – видимая всем клиентам – защищенная(protected) – видимая самому классу и его подклассам – закрытая(private) – видимая только самому классу
Реализация операций • Скрытая (инкапсулированная) реализация операций интерфейса класса • Члены-данные класса скрыты от пользователей и предназначены для реализации операций класса
Типы отношений между классами • Ассоциация – связь между классами • Наследование (обобщение) – иерархия классов • Использование (зависимость) – передача в параметрах операции
Ассоциация • • Смысловая связь между абстракциями Один-к-одному Один-ко-многим Многие-ко-многим
Примеры отношений. Ассоциация n Студент учится в университете n Студент исполняет роль учащегося, Университет – ВУЗа n Студент может учится в нескольких ВУЗах n Компания состоит из отделов
Наследование • Один класс (подкласс) повторяет структуру и поведение другого класса (суперкласса) • В подклассе структура и поведение исходного суперкласса дополняются и переопределяются, расширяются или ограничиваются
Наследование • Для моделирования необходимо: – Выделить общие обязанности, атрибуты и операции – Вынести выделенное в отдельный родительский класс – Остальные, более специализированные классы сделать его потомками
Примеры отношений. Наследование • Shape – родительский класс • Rectangle и Circle – классыпотомки. • Реализация операции в дочернем классе замещает реализацию операции в родительском классе. • Одинаковые операции должны иметь одинаковую сигнатуру (имя и параметры)
Примеры отношений. Использование
Полиморфизм • Подкласс ведёт себя по-другому, но при этом может повторять поведение суперкласса • Аналог – переопределение операторов «+» • Позднее связывание – связь реализации метода и его имени происходит на этапе выполнения
Типизация • Иерархия классов устанавливает иерархию типов • Подклассы являются подтипами суперкласса • Правило: присвоение объекту Y значения объекта X допустимо, если тип объекта X совпадает с типом объекта Y или является его подтипом
Диаграмма классов
Код на языке C++ class A { public: virtual void Say. Hello() { printf(“ A приветствует Вас ”); }; } class B: public A { public: virtual void Say. Hello() { printf(“ B приветствует Вас ”); }; } class C: public A { public: virtual void Say. Hello() { printf(“ C приветствует Вас ”); }; }
Пример использования классов main() { B b; // создание объекта класса B A a; // создание объекта класса A С с; // создание объекта класса C a = b; // можно b = a; // нельзя c = b; // можно ли? }
Ещё кое-что о наследовании • Абстрактный класс – класс для которого экземпляры не создаются • Подклассы абстрактных классов доопределяют их до жизнеспособных абстракций, наполняя содержанием, позволяя создавать экземпляры • Абстрактный класс – «чистый» интерфейс
Примеры
1 -й пример системы для моделирования • Объект моделирования – кухня • Диаграмма классов позволит описать, как устроена наша система
1 -й пример системы для моделирования • Какие абстракции мы можем выделить в нашей Системе? • Какими свойствами они обладают? • Как они могут взаимодействовать между собой?
Структура кухни • • Мебель Крупная техника Мелкая техника Узел подачи воды Освещение Продукты Мусор Повар
Пример диаграммы
Пример диаграммы
Пример диаграммы
2 -й пример. Будем рисовать • Рисунок состоит из нескольких простых фигур: точек, линий, треугольников, окружностей и проч. • Задача: нарисовать сложный рисунок из примитивов
struct s. Coordinate { float x; float y; }; class IShape { public: virtual void Draw() const = 0; }; class CPoint : public IShape { public: CPoint(s. Coordinate _coord); virtual void Draw() const; protected: s. Coordinate m_Coord; };
class CLine : public IShape { public: CLine(s. Coordinate _First. Coord, s. Coordinate _Second. Coord); virtual void Draw() const; protected: s. Coordinate m_First. Coord; s. Coordinate m_Second. Coord; }; class CArc : public CLine { public: CArc(s. Coordinate _First. Coord, s. Coordinate _Second. Coord, float _Radius); virtual void Draw() const; protected: float m_Radius; };
class CDrawing { public: bool Add. Shape(IShape* _shape); void Draw(); private: std: : vector<IShape*> m_Shapes; }; bool CDrawing: : Add. Shape(IShape* _shape) { m_Shapes. push_back(_shape); } void CDrawing: : Draw() { for ( int i = 0; i < m_Shapes. size(); i++ ) { m_Shapes[i]->Draw(); } }
void main() { CDrawing drawing; CPoint point({100, 100}); drawing. Add. Shape(&point); CLine line({200, 200}, {300, 300}); drawing. Add. Shape(&line); CTriangle triangle({250, 250}, {250, 300}, {300, 400}); drawing. Add. Shape(&triangle); drawing. Draw(); }
Заключение Объектно-ориентированная программа состоит из иерархий классов Объекты являются экземплярами классов и непосредственно выполняют функциональность программы Наследование и полиморфизм позволяют повторно использовать функциональность (код)
Post Scriptum
Правила изображения классов на диаграммах • При изображении классов в UML, следует придерживаться следующих правил: • показывать только те свойства, которые важны для понимания абстракции в данном контексте; • разделять длинные списки атрибутов и операций на группы в соответствии с их категориями; • показывать взаимосвязанные классы на одной и той же диаграмме.
Правила моделирования отношений • Отношение зависимости надо использовать, только если моделируемое отношение не является структурным. • Обобщение надо использовать только если имеет место отношение типа «является» • Множественное наследование часто можно заменить агрегированием. • Надо стараться поддерживать баланс в отношениях обобщения: иерархия наследования не должна быть не слишком глубокой, ни слишком широкой. • Ассоциации надо применять прежде всего там, где между объектами существуют структурные отношения.
Правила изображения отношений • Выбрав один из стилей оформления линий (прямые или наклонные), в дальнейшем старайтесь его придерживаться. Прямые линии подчеркивают, что соединения идут от • родственных сущностей к одному общему родителю. Наклонные линии позволяют существенно сэкономить пространство в сложных диаграммах. • Избегайте пересечения линий. • Показывайте только такие отношения, которые необходимы для понимания особенностей группирования элементов модели; скрывайте несущественные (особенно • избыточные) ассоциации.
Общие советы по разработке диаграмм При разработке диаграмм надо помнить следующее: • Цель создания диаграмм на UML — не рисование красивых картинок, а визуализация, специфицирование, конструирование и документирование. • Надо избегать избыточных диаграмм, они только загромождают модель. • Каждая диаграмма должна содержать только необходимые для ее целей детали, но не меньше. • Поддерживайте баланс между структурными диаграммами поведения. • Не делайте диаграммы очень большими или очень маленькими. • Группируйте диаграммы в пакеты, в соответствии с их представлением.
Советы по изображению диаграмм • Дайте диаграмме имя, соответствующее ее назначению; • Расположите элементы так, чтобы свести к минимуму число пересечений; • Пространственно организуйте элементы так, чтобы семантически близкие сущности располагались на диаграмме рядом; • Используйте примечания и цвет, чтобы привлечь внимание читателя к важным особенностям диаграммы.
Как выглядит хорошая диаграмма Хорошо структурированная диаграмма обладает следующими свойствами: • заостряет внимание на одном аспекте некоторого представления системы; • содержит только элементы, существенные для понимания этого аспекта; • содержит детали, соответствующие выбранному уровню абстракции (не обременена деталями, без которых можно обойтись); • не настолько лаконична, чтобы ввести читателя в заблуждение относительно важных аспектов семантики.
Занятие IV.ppt