Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Проблема типологии научных революций: Глобальные научные революции и типы научной рациональности...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2022-10-10 | 30 |
5.00
из
|
Заказать работу |
|
|
Именно объектно-ориентированная декомпозиция отличает объектно-ориентированное проектирование от структурного, поскольку в первом случае логическая структура системы отражается абстракциями в виде классов и объектов, а во втором отражается алгоритмами.
Объектно-ориентированный анализ (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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!