Базовая информация о объектно-ориентированном программировании

Процедурные языки

Чтобы понять что такое объектно-ориентированное программирование (ООП) нужно сначала понять что оно заменяет. Ранние языки были процедурными: программисту требовалось описать конкретный набор процедур которые выполнял компьютер.

To understand what an object-oriented programming language is, you need to understand what it replaced. Early programming languages were procedural—so-called because the programmer would define a very specific set of procedures that the computer would undertake.

В те времена процедуры записывались на перфокартах. На каждом шаге данные читались, обрабатывались и сохранялись. Этот подход хорошо работал тогда, да и сейчас в общем-то свою функцию выполняет. Однако, когда нам требуется написать программу, которая сложнее чем набор простых шагов - то в этом случае решение с помощью процедурного подход становится сложным для работы. Одним из вариантов преодоления результирующей сложности программы является ООП.

Объектно-ориентированное программирование

В первом ООП языке (Simula) была введена идея объекта. Объекты это наборы информации, воспринимаемые как целое. Туманно, но разберем позже на примерах, пока же поговорим о классах. В контексте ООП это можно сказать «предобъекты». Они содержат список свойств, которые после определения становятся объектом.

Рассмотрим пример с шахматами. Предположим что нам требуется написать шахматную игру. Вероятно нам захочется использовать класс Фигура. Каждая Фигура имеет следующий набор свойств:

Цвет

Высота

Форма

Как ходит

Объект определяет конкретного представителя, принадлежащего классу. Положим что мы хотим объект с названием БелаяКоролева. У этого объекта будут следующие определения для свойств (белый, высокий, цилиндрический с зубцами, в любом направлении на любое расстояние). Так же объект может содержать функции, которые в ООП принято называть методами.

Чем ОО подход лучше процедурного? Если кратко, то ООП языки позволяют аккуратнее организовать данные и код так, что в больших проектах работа с ними происходит более гибко. Познакомимся со основными столпами ООП.

Абстракция

К нашему счастью, чтобы пользоваться чем-то не обязательно знать как оно работает. Автомобиль это сложная инженерная система, но чтобы ехать на нем не обязательно знать в подробностях как функционирует каждая его часть. 1) Конечно если мы знаем конструкцию лучше, пользоваться мы будем гораздо эффективнее и надежнее. Знание инструмента отличает профессионала от дилетанта.

Тоже самое можно сказать и о объектах в ООП. Вернемся к шахматам, вероятно у фигуры есть метод move(), для эта функция может использовать множество данных или другие методы: начальная и конечная позиция, методы для определения того, не стоит ли какая-нибудь фигура на пути следования, метод взятия фигуры и т.д. Но нам не требуется знать всех этих тонкостей, мы пишем move() и фигура двигается. Это и есть абстракция.

Инкапсуляция или сокрытие

В ООП это метод с помощью которого в ООП реализуется абстракция. Каждый объект это набор данных, рассматриваемый как единая сущность. К данным относятся как переменные, так и методы.

Обычно переменные считаются скрытыми, приватными. Это означает, что другие объекты и их методы к ним доступа не имеют. Значения переменных меняются только собственными методами объекта.

Шахматная фигура Слон может, например, переменную с названием position - текущая позиция. Значение этой переменной необходимо для метода move(). Естественно Слону приписан еще и цвет.

Когда программист делает переменную приватной а метод move() общественным (публичным) он защищает ее значение от изменения каким-нибудь внешним действием. Аналогично, если цвет это приватная переменная, никто не сможет его изменить, если в объекте не существует метода которы бы это сделал.

Все эти переменные и методы хранятся в пределах объекта Слон. Так как они сокрыты, программист может менять структуру и содержимое объекта не беспокоясь о его интерфейсе: наборе публичных методов.