Академический Документы
Профессиональный Документы
Культура Документы
ПРОГРАММИРОВАНИЕ В С++
• ВВЕДЕНИЕ В ООП
• ПОНЯТИЯ КЛАССА И ОБЪЕКТА
• ОСНОВНЫЕ ПРИНЦИПЫ ООП
• СПЕЦИФИКАТОРЫ ДОСТУПА
• ВЫНОС ТЕЛА МЕТОДА ЗА КЛАСС
• ПОНЯТИЕ АКСЕССОРА, ИНСПЕКТОРА, МОДИФИКАТОРА
ПОНЯТИЕ ООП
Ранее мы с вами уже знакомились с концепцией функционального программирования, при котором
основная логика задачи (алгоритм) представляется в виде набора функций. И каждая из таких
функций реализует отдельные шаги общего алгоритма.
Пока мы реализуем простые задачи и нам достаточно имеющихся (встроенных) типов данных, то
функционального подхода достаточно.
Однако в проектах для предметных областей со сложной структурой, в которой нужно обязательно
учитывать особенности взаимодействия (связи) между ее объектами, нам нужна другая методология.
Нужен такой подход, который позволит описать связь между данными и функциями их обработки
(что невозможно в функциональном программировании).
Например, функция_1 должна работать только с данными одного типа, функция_2 только с
другими.
И более того, нам нужно создать такую функцию_3, которая с данными первого типа работает по
одному алгоритму, а для данных второго типа предоставляет совсем другую функциональность.
ПОНЯТИЕ ООП
Рассмотрим эту ситуацию на примере.
Предположим, что у нам необходимо оценить уровень успеваемости по критериям “отлично”,
“хорошо”, “удовлетворительно”, “неудовлетворительно” для ученика и студента.
При этом у студента оценка варьируются в диапазоне от 0 до 100, а у ученика от 1 до 12, т.е.
диапазоны критериев успеваемости абсолютно не совпадают. Для студента “отлично” - это балл от
90 до 100, а для ученика - от 10 до 12.
Более этого студенческие баллы со значениями выше 12 вообще являются ошибочными данными
для студента.
При использовании функционального подхода нам нужно, как минимум, создавать две отдельные
функции с разными именами.
А что, если потом в задаче добавится еще и ученик младших классов, у которого оценки от 1 до 5?
Тогда придется создать еще одну, третью, функцию.
ПОНЯТИЕ ООП
Рассмотрим эту ситуацию на примере.
А как вообще проверить, чьи это баллы? Студента или ученика?
По имени «Jane» или «Bob» это точно не определить.
А это нужно знать, чтобы определить, какую функцию вызвать в программе: defineStudSuccess() или
definePupSuccess()?
То есть нам необходима связь “объект - его данные -его функциональность”, которую
функциональное программирование простым и прозрачным способом обеспечить не может.
Однако функциональное программирование не является единственным подходом к разработке
программного обеспечения. Не менее популярной и даже более распространенной является
парадигма объектно-ориентированного программирования (ООП).
Объектно-ориентированное программирование (ООП) — это такой подход к разработке программ
(парадигма программирования), при котором отдельные компоненты системы (программы)
представляются в виде объектов.
ПОНЯТИЕ ООП
Популярность ООП также вызвана тем фактом, что использование объектно-ориентированного
программирования позволяет практически однозначно отобразить сущности (элементы) реального
мира (предметной области, задачи) в структуру программы.
При этом сохраняются особенности их структуры, связи (зависимости) между ними и детали их
поведения.
Можно сказать, что ООП помогает нам разрабатывать программу с таким содержимым, которое
наиболее похоже на наше естественное представление о задаче (фрагменте реального мира).
Конечно, основными концепциями в ООП являются понятия объекта и класса.
Большинство сущностей (компонентов, частей) любой предметной области — это объекты.
Например, клиент банка, у которого есть имя, фамилия, возраст, еще какие-то характеристики,
является объектом реального мира.
Клиент банка может открыть счет, проверить состояние счета, пополнить счет и т.д., т.е. у него есть
поведение (отображающее те задачи, который он должен решать в этой предметной области).
ПОНЯТИЯ КЛАССА И ОБЪЕКТА
Класс — это некоторый шаблон (макет), описывающий структуру и возможное поведение объекта.
Можно сказать, что класс — это чертеж (схема), используя которую можно создать конкретный
объект.
Конкретная реализация (воплощение) такого шаблона — это объект (называемый также
экземпляром класса). Один объект может отличаться от другого также, как один клиент банка
отличается от другого: фамилией, возрастом и т.д.
Рассмотрим на примере животного - кошки. У каждой кошки есть голова, лапы, хвост, уши, шерсть, т.
е. описывая какую-то отдельную породу кошки нам необходимо описывать эти характеристики.
Также каждая кошка умеет мяукать, прыгать, сидеть. Таким образом, кошка — это класс с
перечисленными свойствами и указанным поведением.
А вот сиамская кошка, у которой голова напоминает треугольник, сужающийся прямыми линиями к
утонченной морде, уши — крупные и заостренные, это объект (т. е. экземпляр класса кошка).
Таким образом, класс — это пользовательский тип данных, описывающий то, какими свойствами и
поведением будут обладать переменные этого типа. А объект — это переменная класса, т.е.
экземпляр с конкретным значением этих свойств.
ОСНОВНЫЕ ПРИНЦИПЫ ООП. ИНКАПСУЛЯЦИЯ
Объектно-ориентированное программирование строится на трех основополагающих принципах:
инкапсуляция, полиморфизм и наследование.
Инкапсуляция — одна из фундаментальных концепций объектно-ориентированного
программирования, которая позволяет скрывать детали внутренней реализации объектов.
Можно сказать, что согласно этому принципу, класс должен рассматриваться, как некий черный
ящик.
Пользователь не знает, что находится внутри (особенности реализации), и взаимодействует с ним
только с помощью предоставленного интерфейса.
ОСНОВНЫЕ ПРИНЦИПЫ ООП. ИНКАПСУЛЯЦИЯ
Рассмотрим на примере.
Для того, чтобы водить современный автомобиль с автоматической коробкой передач не нужно
знать, как устроен и работает его двигатель, что такое бензонасос, где расположена система
охлаждения двигателя. Все эти особенности и действия отдельных механизмов автомобиля скрыты
от водителя и, в тоже время, разрешают ему крутить руль и нажимать на педали газа или тормоза,
не задумываясь, что в это время происходит под капотом.
Такое сокрытие внутреннего устройства и процессов, реализующих работу автомобиля, гарантируют
простоту его использования и эффективность управления. Даже для водителей, которые не имеют
значительного опыта вождения и не являются профессиональными автомеханиками.