ООП. Этапы выполнения объектно-ориентированного программирования и используемые диаграммы UML. — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

ООП. Этапы выполнения объектно-ориентированного программирования и используемые диаграммы UML.

2022-10-29 25
ООП. Этапы выполнения объектно-ориентированного программирования и используемые диаграммы UML. 0.00 из 5.00 0 оценок
Заказать работу

Этапы ОО программирования:

1. Уточненное описание диаграмм КЛАССОВ с учетом конкретизации каркаса приложения и использования библиотеки MFC.

2. Описание структуры приложения в виде диаграмм КОМПОНЕНТОВ:

- на уровне файлов исходного текста (описание структуры С-проекта приложения);

- на уровне исполнимых файлов;

- на информационном уровне с описанием структуры информационной базы приложения, в том числе структуры баз данных, табличных документов и т.п.

3. Описание диаграмм РАЗВЕРТЫВАНИЯ.

4. Реализация приложения на ЯВУ.

 

Диаграммы UML используемые на этом этапе:

1. Диаграммы классов (уточненные с учетом конкретизации каркаса приложения и отношений между классами).

2. Пакеты (состав системы, подсистемы) - представляют собой универсальный механизм организации элементов в группы. В пакет можно поместить структурные, поведенческие и другие группирующие сущности.

3. Диаграммы компонентов. Относятся к числу статичных диаграмм, она является одним из средств группирования элементов в UML.

4. Диаграммы РАЗВЕРТЫВАНИЯ - Это диаграмма в которой представлены реальные физические узлы, отображающие физическую архитектуру. Связи между ними соответствуют физическим связям.

24. С++. Характеристика наследования и видов наследования.

Наследование - механизм создания новых классов. Это способ, когда новый класс разделяет члены исходного класса, а с другой стороны, добавляет новые члены, при необходимости переописывает члены исходного класса. Переописание м.б. выполнено в виде перегрузки - сохраняется сигнатура, либо в виде подстановки (или подмены) - сохраняется интерфейс. Внутри класса работает классическая перегрузка.

Виды наследования:

1. одиночное - один базовый класс

2. множественное - наследуется более одного класса

a. прямое

b. косвенное - через промежуточные классы

25. С++. Синтаксис наследования, спецификаторы доступа.

Синтаксис.

class <имя_производного_класса>: <спецификатор доступа> имя базового класса 1, <спецификатор доступа> имя базового класса 2…

{ public;

private;

protected; }

спецификатор_доступа - определяет статус членов базового класса в производном классе. Используются спецификаторы public, private, protected. Если уровень доступа не указан, то используется по умолчанию private.

Видимость при наследовании:

1. Видимость членов класса внутри класса - глобальная

2. Видимость по отношению к объекту - при работе видит область public своего класса

3. Производный класс видит public и protected базового класса

4. Объект по отношению к базовому классу видит в зависимости от спецификатора_доступа:

· Public - public

· Private - ничего не видит

· Protected - ничего не видит

26. С++. Правила наследования производным классом базовых классов.

Синтаксис.

class <имя_производного_класса>: <спецификатор доступа> имя базового класса 1, <спецификатор доступа> имя базового класса 2…

{ public;

private;

protected; }

 

спецификатор_доступа - определяет статус членов базового класса в производном классе. Используются спецификаторы public, private, protected. Если уровень доступа не указан, то используется по умолчанию private.

Видимость при наследовании:

1. Видимость членов класса внутри класса - глобальная

2. Видимость по отношению к объекту - при работе видит область public своего класса

3. Производный класс видит public и protected базового класса

4. Объект по отношению к базовому классу видит в зависимости от спецификатора_доступа:

· Public - public

· Private - ничего не видит

· Protected - ничего не видит

Конструктор производного класса описывается по обычным правилам.

<имя конструктора> ([<список формальных аргументов>]).

В общем случае список аргументов может отсутствовать или присутствовать, но если конструктору базового класса требуются параметры, то их следует передать через список формальных документов. Через «:» указываются конструкторы всех базовых классов.

<имя конструктора> ([<список формальных аргументов>]): имя конструктора базового класса, ([<список фактических аргументов>]).

При создании объекта производного класса сначала вызывается конструктор производного класса, а затем конструктор базового класса.

27. С++. Правила видимости членов базовых классов со стороны объектов производного класса.

Синтаксис.

class <имя_производного_класса>: <спецификатор доступа> имя базового класса 1, <спецификатор доступа> имя базового класса 2…

{ public;

private;

protected; }

спецификатор_доступа - определяет статус членов базового класса в производном классе. Используются спецификаторы public, private, protected. Если уровень доступа не указан, то используется по умолчанию private.

Видимость при наследовании:

1. Видимость членов класса внутри класса - глобальная

2. Видимость по отношению к объекту - при работе видит область public своего класса

3. Производный класс видит public и protected базового класса

4. Объект по отношению к базовому классу видит в зависимости от спецификатора_доступа:

· Public - public

· Private - ничего не видит

· Protected - ничего не видит

Конструктор производного класса описывается по обычным правилам.

<имя конструктора> ([<список формальных аргументов>]).

В общем случае список аргументов может отсутствовать или присутствовать, но если конструктору базового класса требуются параметры, то их следует передать через список формальных документов. Через «:» указываются конструкторы всех базовых классов.

<имя конструктора> ([<список формальных аргументов>]): имя конструктора базового класса, ([<список фактических аргументов>]).

При создании объекта производного класса сначала вызывается конструктор производного класса, а затем конструктор базового класса.

28.С++. Синтаксис множественного наследования.

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

class <имя_производного_класса>: <спецификатор доступа> имя базового класса 1, <спецификатор доступа> имя базового класса 2…

Пример:

class B1 {

public:

B1();

}

class B2 {

public:

B2(int x);

}

class D: private B1, public B2 {

public D:

D(int x, int y): B1(), B2(x);

}

 

 

29.С++. Синтаксис описания конструкторов при наследовании.

Конструктор производного класса описывается по обычным правилам.

<имя конструктора> ([<список формальных аргументов>]).

В общем случае список аргументов может отсутствовать или присутствовать, но если конструктору базового класса требуются параметры, то их следует передать через список формальных документов. Через «:» указываются конструкторы всех базовых классов.

<имя конструктора> ([<список формальных аргументов>]): имя конструктора базового класса, ([<список фактических аргументов>]).

При создании объекта производного класса сначала вызывается конструктор производного класса, а затем конструктор базового класса.

Пример:

class B1 {

public:

B1();

}

class B2 {

public:

B2(int x);

}

class D: private B1, public B2 {

public D:

D(int x, int y): B1(), B2(x);

}

30. С++. Абстрактные классы. Виртуальные функции.

Абстрактным классом называется класс который содержит чисто виртуальные функции.

Чисто виртуальная функция - это виртуальная функция, которая не имеет определения в базовом классе. Она должна переопределяться в каждом производном классе, иначе ошибка.

Виртуальные функции - это функции-члены, объявленные в базовом классе и переопределенная в производном. Чтобы создать виртуальную функцию, надо указать virtual перед ее объявлением в классе. Особые св-ва функций проявляются при их вызове с помощью указателей. Если указатель на объект базового класса устанавливается на объект производного класса, содержащий виртуальную функцию, выбор требуемой функции основывается на типе объекта, на который ссылается указатель, выбор осуществляется в ходе программы. Т.о. если указатель ссылается на объекты разных типов, то будут вызваны разные виртуальные функции. Виртуальные функции являются иерархичными. Если функция определенная в базовом классе, не переопределялась в производном, и происходит ее вызов, то в этом случае вызывается функция определенная в базовом классе.

class B {

public:

virtual void f(int x) { cout << x; }

};

 

class D: public B {

public:

virtual void f(int x) { cout << 100*x; }

}

 

Void main() {

B b_obj;

D1 d1_obj;

B *pB = &b_obj;

pB->f(3); // 3

pB = &d1_obj;

pb->f(3); // 300

}

 

31. С++. Доступ к членам базовых классов со стороны объектов производных классов.

Пусть есть некая иерархия классов которая создана при наследовании.

Рассмотрим доступ к членам класса со стороны объекта D

D D_obj;

D *pD = &D_obj;

B *pB = &D_obj;

 

1. Обьекты класса и соответствующие указатели видят всё в соответствии с поиском по иерархии до тех пор пока метод не будет найден, иначе будет зафиксирована ошибка. Поиск ведется только в public секциях класса

2. Через pB обьекты производного класса видят только public секцию, но это не касается виртуальных или подмененных методов.

3. Доступ через pB. Обьекты производного класса для виртуальных или подмененных методов имеют доступ по правилам иерархического поиска.

32. С++. Доступ к членам базовых классов со стороны объектов производных классов через указатели на базовые классы.

Пусть есть базовый класс (например, с открытыми методами и с виртуальными функциями).

Виртуальная функция - это функция, которая имеет спецификатор Virtual.

Virtual <прототип> {…}

Пусть есть производный класс, который наследует открытые функции, перегружает открытые функции и подменяет виртуальные функции.

Пусть есть указатель на базовый класс, тогда его можно использовать:

1)Со стороны объектов базового класса для доступа к открытым методам.

2)Для ссылки на объекты производного класса

3)Уже для объектов производного класса через указатель есть доступ к тем членам производного класса, который он унаследовал от базового класса, в том числе и к открытым членам базового класса, к виртуальным функциям, подмененным в производном классе и к перегруженным функциям базового класса в производном классе.

Правило наследования:

P F(…) где P - указатель на базовый класс

1. Компилятор устанавливает тип объекта, т.е. чей адрес был присвоен Р и ищет в нём указанную функцию, если нет, то поднимается на верхний уровень и ищет в классе родители, и далее вверх по иерархии. Если не найден метод, то будет выдана ошибка.

2. Объекты производного класса видят все public - члены базового класса.

3. Указатель на базовый класс, инициализированный адресом производного объекта, может использоваться для доступа со стороны производного объекта тем членам базового класса, которые были унаследованы.

4. А так же для доступа тем членам производного класса, которые он унаследовал.

5. Если вызывается виртуальная функция, то реализуется динамический полиморфизм (позднее связывание). Время вызываемой виртуальной функции определится типом производного объекта, на который ссылается указатель.

33. С++. Полиморфизм и его виды. Позднее связывание.

Полиморфизм:

1. Статичный - «раннее связывание»:

a) операторы;

b) функции.

2. Динамический - «позднее связывание»:

2. Динамический полиморфизм реализуется:

a) на базе механизма наследования;

b) на базе использования виртуальных функций;

c) используются указатели на базовые классы.

«Позднее связывание» означает, что фактический выбор вызываемой функции осуществляется только в ходе выполнения программы. Основным средством позднего связывания являются виртуальные функции. Выбор виртуальной функции зависит от типа указателя или ссылки, с помощью которой она вызывается. Поскольку в большинстве случаев на этапе компиляции эта информация отсутствует, связывание объекта и вызова функции откладывается до выполнения программы. Основное преимущество позднего связывания - гибкость. Позднее связывание позволяет создавать программу, реагирующую на события, происходящие в ходе выполнения, без использования большого количества кода, предусматривающего все возможные варианты, однако это может замедлить работу программы.

 

Пример

class B {

public:

virtual void f(int x) { cout << x; }

};

 

class D: public B {

public:

virtual void f(int x) { cout << 100*x; }

}

 

Void main() {

B b_obj;

D1 d1_obj;

B *pB = &b_obj;

pB->f(3); // 3

pB = &d1_obj;

pb->f(3); // 300

}

34. С++. Применение указателей на базовые классы для использования динамического полиморфизма.

«Позднее связывание» означает, что фактический выбор вызываемой функции осуществляется только в ходе выполнения программы. Основным средством позднего связывания являются виртуальные функции. Выбор виртуальной функции зависит от типа указателя или ссылки, с помощью которой она вызывается.

Виртуальные функции - это функции-члены, объявленные в базовом классе и переопределенная в производном. Чтобы создать виртуальную функцию, надо указать virtual перед ее объявлением в классе. Особые св-ва функций проявляются при их вызове с помощью указателей. Если указатель на объект базового класса устанавливается на объект производного класса, содержащий виртуальную функцию, выбор требуемой функции основывается на типе объекта, на который ссылается указатель, выбор осуществляется в ходе программы. Т.о. если указатель ссылается на объекты разных типов, то будут вызваны разные виртуальные функции. Виртуальные функции являются иерархичными. Если функция определенная в базовом классе, не переопределялась в производном, и происходит ее вызов, то в этом случае вызывается функция определенная в базовом классе.

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

35. С++. Реализация динамического полиморфизма на примере.

«Позднее связывание» означает, что фактический выбор вызываемой функции осуществляется только в ходе выполнения программы. Основным средством позднего связывания являются виртуальные функции. Выбор виртуальной функции зависит от типа указателя или ссылки, с помощью которой она вызывается.

class B {

public:

virtual void f(int x) { cout << x; }

};

class D: public B {

public: virtual void f(int x) { cout << 100*x; }

}

Void main() {

B b_obj;

D1 d1_obj;

B *pB = &b_obj;

pB->f(3); // 3

pB = &d1_obj;

pb->f(3); // 300

}

 

 

36. MFC. Характеристика (назначение и состав) библиотеки.

Microsoft Foundation Classes (MFC) — библиотека на языке C++, разработанная Microsoft и призванная облегчить разработку GUI-приложений для Microsoft Windows путем использования богатого набора библиотечных классов.

Библиотека MFC облегчает работу с GUI путем создания каркаса приложения — «скелетной» программы, автоматически создаваемой по заданному макету интерфейса и полностью берущей на себя рутинные действия по его обслуживанию (отработка оконных событий, пересылка данных между внутренними буферами элементов и переменными программы и т.п.). Программисту после генерации каркаса приложения необходимо только вписать код в места, где требуются специальные действия. Каркас должен иметь вполне определенную структуру, поэтому для его генерации и изменения в Visual C++ предусмотрены мастера.

MFC предоставляет объектно-ориентированный слой оберток над множеством функций Windows API, делающий несколько более удобной работу с ними. Фактически классы подменяют API функции, объединяют функции API в логически организованное множество классов с прозрачным интерфейсом. Этот слой представляет множество встроенных в систему объектов (окна, виджеты, файлы и т. п.) в виде классов и опять же берет на себя рутинные действия вроде закрытия дескрипторов и выделения/освобождения памяти.

Интерфейс, который обеспечен библиотекой, практически независим от конкретных деталей архитектуры компьютера. А значит, сами приложения могут быть легко адаптированы к новым версиям Windows.

Cтруктура библиотеки.

MFC:

2) Множество классов, которые вырастают из одного класса, называются CObject

3) Отдельные классы не наследуются от CObject. Это автономные классы.

a)Типовые (стандартные)

b)Дополнительные (ориентированы на решение дополнительных задач)

 

 


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.068 с.