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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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

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

2022-10-10 30
OOD использует многообразие приемов представления моделей, отражающих логическую (классы и объекты) и физическую (модули и процессы) структуру системы, а также ее статические и динамические аспекты. 0.00 из 5.00 0 оценок
Заказать работу

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

Объектно-ориентированный анализ (object-orientedanalysis, OOA) направлен на создание моделей реальной действительности на основе объектно-ориентированного подхода.

ООА – это методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области.

Соотношения между анализом ООА, проектированием OOD и программированием ООР выглядят следующим образом:

На результатах объектно-ориентированного анализа ООА формируются модели, на которых основывается объектно-ориентированное проектирование OOD. A OOD в свою очередь создает фундамент для окончательной реализации системы с использованием методологии объектно-ориентированного программирования ООР.

 

 

23 Базовые понятия ООП: инкапсуляция, наследование, полиморфизм.

Для понимания преимуществ объектно-ориентированного программирования необходимо разобраться с тремя ключевыми понятиями ООП:

· инкапсуляция (encapsulation)

· наследование (inheritance)

· полиморфизм (polymorphism)

Инкапсуляция - это механизм, который объединяет данные и методы, манипулирующие этими данными, и предусматривает защиту методов и данных от внешнего вмешательства или неправильного использования.

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

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

Другими словами суть инкапсуляции такова: переменные состояния объекта скрыты от внешнего мира. Измн состояний объекта (значений его данных) возможно только с помощью его методов (функций, процедур). Это предотвращает возможность введения объекта в недопустимое состояние и/или несанкционированное разрушение этого объекта.

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

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

Так проводя классификацию новых объектов (животных и т.д.) необходимо выявлять, в чем проявляется сходство и различие с другими объектами общего класса. Каждый класс при этом определяется набором соответствующих характеристик. Начиная с корневого класса, в итоге формируется иерархия классов. Более высокие уровни содержат более обобщенные характеристики, а каждый следующий уровень является более специфическим, и менее общим. Когда некоторая характеристика определена в текущем классе, то все классы ниже в иерархии автоматически включают эту характеристику. Потому, когда речь заходит про представителя того или иного конкретного класса, то в первую очередь внимание уделяют специфическим особенностям в рамках этого класса.

Смысл и универсальность наследования заключается в том, что не надо каждый раз заново (с нуля) описывать новый класс. Можно легко создать новый класс, указав родительский (базовый класс) и описав отличительные особенности создаваемого класса. В результате, этот класс будет обладать всеми свойствами родительского класса плюс своими собственными отличительными компонентами.

Отметим, что в некоторых объектно-ориентированных языках программирования определены механизмы наследования, позволяющие наследовать непосредственно не только из одного класса. Кроме того, следует иметь в виду, что реализации даже простого наследования могут различаться в зависимости от конкретного языка.

Говоря о терминологии, следует обратить внимание на то, что в описаниях языков ООП принято класс, из которого наследуют называть родительскимклассом (parentclass) или базовым (baseclass). Класс, который получается в результате наследования, называется порожденным классом (derivedorchildclass). Родительский класс является более обобщенным, а порожденный класс – более строгий и конкретный, что делает его более удобным в применении.

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

Полиморфизм (в языках программирования) — взаимозаменяемость объектов с одинаковым интерфейсом. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию - например, реализация класса может быть изменена в процессе наследования.Полиморфизм (от поли... и греч. morphē — форма) – свойство некоторых веществ существовать в нескольких кристаллических состояниях (модификациях) с разной структурой. Пример полиморфизма: алмаз и графит.

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

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

24 Наследование классов в языке С++.

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

Базовый класс может быть или непосредственным базовым классом производного класса, или его косвенным базовым классом. Косвенный базовый класс не указывается явно в заголовке, а наследуется с некоторого более высокого уровня иерархии классов.

На приведенном рисунке CLASSA является непосредственным базовым классом для CLASSB, и косвенным базовым классом для CLASS С.

При реализации механизма наследования был введен защищенный тип членов класса protected. Производный класс наследует защищенные (protected) и открытые (public) члены базового класса, а закрытые (private) члены базового класса недоступны для членов производного класса.

 

Объявление производного класса происходит на основе следующего синтаксиса:

class имя_класса: [ public | protected | private ] имя базового класса

{

 объявления членов класса

 };

Отметим, что перед именем базового класса стоит служебное слово, которое определяет тип происхождения. В языке С++ тип происхождения может быть либо public, либо protected, либо private, причем, private – это значение по умолчанию.

При выводе класса из открытого (public) базового класса открытые элементы базового класса становятся открытыми членами, а защищенные – защищенными членами производного класса.

При выводе класса из защищенного (protected) базового класса открытые и защищенные члены базового класса становятся защищенными членами производного класса.При выводе класса из закрытого (private) базового класса открытые и защищенные члены базового класса становятся закрытыми членами производного класса.

 

Пример программы с наследованием классов.

Рассмотрим пример, в котором демонстрируется работа механизма наследования классов в языке С++:

 

1. #include<iostream>

2. usingnamespace std;

 

3. class avto {

4. public:

5. avto();

6. ~avto();

7. void setname(char* name1){ name=name1;}

8. void setcena(int cena1) {cena=cena1;}

9. void setrashod(double rashod1) {rashod=rashod1;}

10. int getcena() {return cena;}

11. char* getname() {return name;}

12. double getrashod() {return rashod;}

 

13. protected:

14. char* name;

15. int cena;

16. double rashod;

17. };

 

18. class gruz_avto: public avto {

19. public:

20. gruz_avto();

21. ~gruz_avto();

22. void setgruzopodemnost(double grpodemn1)

23. {grpodemn=grpodemn1;}

24. double getgruzopodemnost() {return grpodemn;}

 

25. private:

26. double grpodemn;

27. };

 

28. avto::avto() {cena=27500; name="MAZ"; rashod=18.5;

29.          cout <<"Class avto!!!"<< endl;};

 

30. avto::~avto(){

31. cout <<"Object avto-class destroy! Address of name_avto is "

32. <<&name <<" RASHOD "<< rashod << endl;};

 

33. gruz_avto::gruz_avto(){grpodemn=15.6; rashod=16.5;

34.           cout <<"Class gruz_avto!!!"<< endl;}

 

35. gruz_avto::~gruz_avto()

{cout <<"Object gruz_avo-class destroy!"<< endl;}

 

36. int main(){

37. char navto[20];

38. cout <<"Input marka avto: "; cin >> navto;

 

39. avto a;

40. a.setname(navto); a.setrashod(11.5);

41. cout << a.getcena() << endl << a.getname() << endl

42. << a.getrashod()<< endl;

 

43. gruz_avto c;

44. c.setcena(23500);

45. cout << c.getcena() << endl << c.getname() << endl

46. << c.getrashod() << endl << c.getgruzopodemnost() << endl;

 

47. return 0;

48. }

 

В строках с 3 по 17 включительно размещается объявление класса avto, который в дальнейшем используется в качестве базового класса при объявлении класса gruz _ avto. Отметим, что при объявлении класса avto предусмотрено объявление явного конструктора (см. 5 стр.) и явного деструктора (см. 6 стр.), которые соответственно определяются в 28-32 строках включительно.

 

В строках с 18 по 27 включительно представлено объявление производного класса gruz _ avto, внутри которого объявляются явный конструктор (см. 20 стр.) и явный деструктор (см. 21 стр.).

 

В строках с 36 по 48 приведено описание функции main (). В начале ее выполнения предусматривается запрос на ввод наименования марки автомобиля. Далее в 39 строке определяется объект a класса avto, а в 40 строке методом setname () это имя заносится в поле name объекта a. При определении объекта а запускаются автоматически сначала неявный конструктор, а затем явный конструктор, который определен в 28-29 строках. В строках 41-42 предусмотрен вывод значений полей объекта а.

 

В строке 43 определяется объект c и при этом сначала запускаются конструкторы (неявный + явный) базового класса avto, а затем неявный + явный конструкторы производного класса gruz _ avto, а потому на экране появятся соответствующие сообщения (см. 29 и 34 строки).

 

В конце выполнения программы будут автоматически вызываться деструкторы, причем для объекта c вначале вызываются явный + неявный деструкторы производного класса gruz _ avto, а потом явный + неявный деструкторы базового класса avto.

 

 


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

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

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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



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

0.055 с.