Ooa_cpp_03_-_Klassy_Obektnyy_Podkhod.ppt
- Количество слайдов: 17
Классы и объекты Программирование
Определение класса Класс – определяемый программистом тип данных, имеющий определенные свойства и заданное «поведение» . Класс – основа объектно-ориентированного программирования. Совокупность классов – компонентная основа, на базе которой строятся алгоритмы программы. Классы можно рассматривать как чёрные ящики, акцентируя внимание на функциональности и условиях применения. Класс можно использовать вторично для другой программы с похожим алгоритмом. То есть, класс – это многократно используемый компонент. Программирование
Пример простого класса Класс включает в себя набор атрибутов и функций, при помощи которых определяется состояние и «поведение» . class Person { public: int age; // нужно задать значение для каждого объекта void Grow. Up() { age = age + 1; }// Grow. Up() string Is. Legal() { if (age >= 18) return "пить можно"; else return "пить нельзя"; }// Is. Legal() }; // class Person В любой момент времени класс Person хранит в себе текущий возраст age, может оценить его при помощи Is. Legal() и увеличить при помощи Grow. Up(). Программирование
Определение объекта Объект – экземпляр какого-либо класса, непосредственно используемый программистом в алгоритме. На базе одного класса можно создать несколько объектов. «Поведение» этих объектов будет одинаковым, но состояния могут отличаться. Person teen; teen. age = 12; Person adult; adult. age = 17; adult. Grow. Up(); printf( "teen: %sn", teen. Is. Legal() ); // пить нельзя printf( "adult: %sn", adult. Is. Legal() ); // пить можно Созданный программистом класс является таким же типом данных, как и все остальные составные типы. Его можно использовать для создания переменных, массивов и т. п. Программирование
Классы vs. объекты Объекты одного класса всегда по-своему различны: Программирование
Причины появления классов в программировании Применение классов дает следующие преимущества по отношению к прочим методикам программирования: • предметную область программы можно описать отдельными структурами данных – классами, • класс удобно воспринимать как законченный компонент, как чёрный ящик с заранее известным функционалом, • можно описать интерфейс класса, начать применять его в программе, а реализацию методов поручить стороннему программисту, • манипулировать классами удобнее, чем отдельными функциями или библиотеками функций, что повышает уровень доступной разработчику абстракции, • универсальные классы используются вторично. Программирование
Примеры применения ООП Объектно-ориентированный подход (классы с объектами) применяют при разработке игр: игровое поле, объекты на нём, игроки и прочее… Программирование
Примеры применения ООП Объектно-ориентированный подход применяют при разработке прикладных программ: элементы интерфейсов, сущности по типу проектов, документов… Программирование
Примеры применения ООП Объектно-ориентированный подход лежит в основе реализации современных учётных систем: учитываемые документы, справочники метаданных, процессы взаимодействия, пользовательские учётные записи… Программирование
Области, где редко используется ООП Классы и объекты не используют в тех проектах, в которых очень мало сущностей для манипуляции и можно уложить алгоритм в набор функций с использованием структур. Например: • • драйверы устройств, простые web-ресурсы, системные утилиты, системы управления базами данных. Программирование
Пример выделения классов при решении задачи Задача: разработать игру «Морской бой» для двух игроков. Решение: 1. выделить и описать сущности 2. для каждой сущности спроектировать класс, то есть, определить набор атрибутов (состояние) и набор методов (поведение) 3. построить алгоритм на основе созданных классов Сущности-классы: Программирование
Синтаксис использования классов для начинающих Класс объявляется в любой части кода проекта. Синтаксис: class Имя. Класса { [ атрибуты класса ] [ методы класса ] }; Не забывайте точку с запятой «; » при объявлении класса. Объекты классов создаются как переменные других типов: Имя. Класса Имя. Переменной; Имя. Класса *Имя. Переменной = new Имя. Класса(); delete Имя. Переменной; При помощи одного класса можно создать сколько угодно объектов или указателей на объекты. Массивы тоже можно создавать, но об этом позже. Программирование
Права доступа к членам класса Доступ к любому полю или функции класса может быть ограничен одним из следующих ключевых слов: • private – закрытый, внутренний член класса. Обращения допускаются только из методов самого класса, но не из методов потомков. • protected – защищенный, внутренний член иерархии классов. Обращение возможно из методов самого класса и его потомков. • public – открытый член класса. Доступ из любого участка кода. class Some. Class { private: int size; }; some. Class cl; cl. size = 5; //! ошибка Программирование
Синтаксис использования классов для начинающих Атрибуты класса – это состояние объектов, порожденных на базе класса. Для каждого объекта состояние своё: class Person { public: int age; bool male; }; // class Person p 1; Person p 2; p 1. age = 10; p 2. age = 8; p 1. male = false; p 2. male = true; printf("Возраст p 1: %d, пол: %s", p 1. age, (p 1. male ? "мужской" : "женский")); // Возраст p 1: 10, пол: женский printf("Возраст p 2: %d, пол: %s", p 2. age, (p 2. male ? "мужской" : "женский")); // Возраст p 2: 8, пол: мужской Программирование
Синтаксис использования классов для начинающих Методы класса – это «поведение» объектов данного класса. Объекты одного класса «ведут» себя одинаково: class Person { public: bool male; public string Which. Sex() { if (male) return "Мужчина"; else return "Женщина"; }// Which. Sex() }; // class Person p 1; Person p 2; p 1. male = true; p 2. male = false; printf( "p 1 точно %s", p 1. Which. Sex() ); printf( "p 2 точно %s", p 2. Which. Sex() ); // p 1 точно Мужчина // p 2 точно Женщина Программирование
Синтаксис использования классов для начинающих Методы класса оперируют атрибутами вызвавшего объекта. Внутри класса можно обращаться к другим методам: class Person { public: int age; bool Is. Legal() { return (this->age >= 18); }// Is. Legal() char* Drink. Ability() { return Is. Legal() ? "можно алкоголь" : "нельзя алкоголь"; }// Drink. Ability() char* Work. Ability() { return this->Is. Legal() ? "уже можно работать" : "ещё нельзя работать"; }// Work. Ability() }; // class Person p; p. age = 19; printf("%s и %s", p. Work. Ability(), p. Drink. Ability()); // уже можно работать и можно алкоголь Программирование
Методы класса В языке C++ процедуры и функции могут быть частью класса, в качестве его методов. Упрощенный синтаксис: Тип. Результата Имя. Метода( [список формальных аргументов] ) { <тело_метода> } Очередной неодушевленный пример: int Foo(int a) { return a + 42; } void Some. Function() { int b, c = 17; printf( "foo returned: %d", Foo(5) ); } Внутри класса объявлять методы нужно до первого места вызова. Для удобства можно разделить объявление классов и их реализацию по файлам *. h и *. cpp. Программирование
Ooa_cpp_03_-_Klassy_Obektnyy_Podkhod.ppt