
- •1.Краткий обзор агрегатного типа struct.
- •Intcena;
- •Int main()
- •Int cena;
- •Void vyvod(avto s)
- •Int main()
- •3.Понятие объединения union.
- •Void vyvod(avto s, int I)
- •Int main()
- •Intcena;
- •Int main()
- •Int cena;
- •Intmain()
- •Void reset(); …
- •Void Demo::reset() // определениефункции reset( )
- •9.Пример реализации класса для организации обработки символьной строки.
- •Int demochar::length()
- •Int main()
- •10.Пример реализации класса для организации обработки одномерного массива целочисленных значений.
- •11.Инициализация объектов.
- •Int main()
- •12Указатель this.
- •13.Постоянные функции-члены класса.
- •3. Class avto {
- •15. Int main()
- •14.Массив объектов.
- •3. Class avto {
- •24. Int main() {
- •15.Статические переменные-члены и функции-члены класса.
- •17. Staticint GetSumCena() { return SumCena; };
- •19. Staticint SumCena;
- •16 Дружественные функции.
- •8. Friendvoid GetFields(avto&);
- •17 Класс, содержащий переменную-член типа класс.
- •3. Class Date_Avto {
- •16. Class avto {
- •30. Int main()
- •18 Сложность больших программных систем.
- •19 Пять признаков сложной системы.
- •20 Роль декомпозиции, абстракции, иерархии при построении сложных систем.
- •21 Объектная модель.
- •Ood основывается на объектно-ориентированной декомпозиции;
- •25Пример программы с наследованием классов.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •36. Int main(){
- •26 Переопределение функций-членов внутри производного класса.
- •3. Class avto {
- •18. Class gruz_avto : public avto {
- •30. Int main()
- •5.Classint_Matrix// класс для обработки целочисленной матрицы
- •45. Int main()
- •Int main()
- •2. Usingnamespace std;
- •3. Int main()
- •18. Return 0;
- •Int main()
- •20. F.Write((char*)&s,sizeof(s));
- •7. Intcena;
- •21. F.Write((char*)&s,sizeof(s)); };
- •22. F.Close();
- •25. F.Seekg(sizeof(s), ios_base::beg);
- •26. F.Read((char*)&s,sizeof(s));
Ood основывается на объектно-ориентированной декомпозиции;
OOD использует многообразие приемов представления моделей, отражающих логическую (классы и объекты) и физическую (модули и процессы) структуру системы, а также ее статические и динамические аспекты.
Именно объектно-ориентированная декомпозиция отличает объектно-ориентированное проектирование от структурного, поскольку в первом случае логическая структура системы отражается абстракциями в виде классов и объектов, а во втором отражается алгоритмами.
Объектно-ориентированный анализ (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) базового класса открытые и защищенные члены базового класса становятся закрытыми членами производного класса.