
- •Объект, класс. Понятие, примеры
- •Структура класса, использование классов
- •Причины возникновения ооп
- •Технология применения ооп при разработке и реализации ис
- •Абстрагирование в ооп, инкапсуляция – понятие и примеры
- •Наследование в ооп, понятие и примеры
- •Модульность в ооп, связность и связанность
- •Иерархия в ооп, полиморфизм, определения и примеры
- •Диаграмма классов, нотация uml
- •Технология руп - базисная структура и принципы Структура продукта процесса
- •Итерация руп, структура и цели итерации
- •Цели и задачи моделирования бизнес – процессов в руп
- •Структура модели бизнес – процесса в руп, пример
- •Требования в руп, формирование и анализ, примеры
- •Use Case моделирование, субъекты, роли и прецеденты Субъекты
- •Прецеденты
- •Логическое представление руп, понятие и примеры
- •Представление выполнения руп
- •Объекты и классы в руп Объекты
- •Этап руп «Анализ и проектирование», общие понятия и задачи этапа
- •Технология Use Case. Основные принципы, примеры.
- •Диаграмма последовательности, определение и примеры.
- •Инструментальная среда поддержки руп
- •Структура системы Enterprise Architect
- •Формирование моделей бизнес – процессов в еа
- •Формальные требования в еа, структура и формирование
- •Моделирование функций системы в еа
- •Структура динамической модели в еа
- •Диаграмма состояния в еа
- •Диаграмма деятельности в еа
- •Диаграмма последовательности в еа
- •Потоки деятельности в еа
- •Создание Case-проекта в Enterprise Architect.
- •Диаграммы реализации в еа
- •Что такое конструктор и для чего он нужен, Какие типы конструктора существуют
- •Деструктор, назначение деструктора.
- •Методы класса, наследование и перекрытие методов.
- •Статические компоненты класса
- •Шаблоны классов, библиотека mfc
- •Списки, технология списков, операции вставить, удалить узел списка
- •Технология связных списков
- •Класс List, свойства и методы класса
- •Абстрактный список, операции над списками в классе List
-
Абстрагирование в ооп, инкапсуляция – понятие и примеры
Абстрагирование – выделение существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и четко определяют его концептуальные границы с точки зрения дальнейшего рассмотрения и анализа
Абстра́кция в объектно-ориентированном программировании — это существенные характеристики объекта, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций (Данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня).
Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.
Инкапсуляция – объединение данных (атрибутов) и поведения (операций) в рамках класса
Инкапсуля́ция — свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью директив: public, private, protected.
Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).
Предостережение: Одна из наиболее распространенных ошибок — делать сокрытие реализации только ради сокрытия. Целями, достойными усилий, являются:
предельная локализация изменений при необходимости таких изменений,
прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
Образ в пример: ложка, опущенная в стакан, не меняет его свойств и не становится частью стакана, хотя и помогает пить из него чай; в то же время, сахар, растворенный в чае с помощью ложки, делает его сладким.
Часто инкапсуляция может быть достигнута простейшими организационными мерами: знание того, что «вот так-то делать нельзя» иногда является самым эффективным средством инкапсуляции!
class A
{
private:
int a,b; //скрытые свойства
void DoSomething(); //скрытый метод.
public:
int ReturnSomething(); //открытый интерфейс
};
Класс А инкапсулирует свойства a, b и метод DoSomething, представляя внешний интерфейс ReturnSomething.
-
Наследование в ооп, понятие и примеры
Наследование – это такое отношение между классами, когда один класс частично или полностью повторяет структуру и поведение другого класса (одиночное наследование) или других (множественное наследование) классов. Наследование устанавливает между классами иерархию "общее-частное".
Связи наследования также называют обобщениями (generalization) и изображают в виде больших белых стрелок от класса-потомка к классу-предку
Рассмотрим учет сотрудников организации. Каждый сотрудник – это, прежде всего, человек. Студент, работник, руководитель – частные случаи объекта "человек", определяющего общие характеристики для всех своих разновидностей. Организация этих понятий в иерархию позволяет избежать повторения кода и обращаться с объектами производных классов как с объектами базового.
Возьмем за основу иерархии класс person, немного изменив его структуру ради соответствия концепции наследования. Поскольку для всех объектов кадровой структуры требуется знать имя, фамилию, а также год рождения для определения возраста, объявим данные атрибуты как protected, заменив заодно тип представления имени и отчества на более удобный в работе тип string.
class person
{
public:
void set_year(int value);
const int get_year() const;
void set_sirname(string& value);
const string& get_sirname() const;
void set_name(string& value);
const string& get_name() const;
protected:
string name;
string sirname;
int year;
};
Работник (employee) отличается от просто человека (person) тем, что работает в некотором подразделении (department) и получает определенную заработную плату. Руководитель (manager), являясь в свою очередь работником предприятия, отвечает за определенную группу подчиненных и может получать заработную плату, складывающуюся из основной ставки и надбавки в виде процента от заработной платы своих работников.
Выделять новый класс из существующего стоит лишь тогда, когда он знает или делает то, чего не знает и не делает объект базового класса. Это означает присутствие в производном классе атрибута или метода, неприменимого для объектов класса-предка.
Когда же требуется только выразить различие между объектами по категориям, достаточно сделать это просто по значению атрибута, выражающего место конкретного объекта среди прочих. В подобном случае наша диаграмма классов могла бы выглядеть так:
Нам же требуется не просто отличать руководителя от просто работника, но и учитывать его связь с множеством подчиненных. Эта связь, в том числе, может использоваться для расчета заработной платы.
Механизм наследования классов позволяет строить иерархии, в которых производные классы получают элементы родительских, или базовых, классов и могут дополнять их или изменять их свойства.
Классы, находящиеся ближе к началу иерархии, объединяют в себе наиболее общие черты для всех нижележащих классов.
По мере продвижения вниз по иерархии классы приобретают все больше конкретных черт:
class manager : public employee
{
public:
list<employee*> Employers;
virtual const double get_salary();
};