Основы ООП

Общаясь со многими ребятами, которые желают научиться программировать, я натыкаюсь на одну тему, которая вначале для них кажется очень сложной и неподъёмной – это ООП (Объектно-ориентированное программирование). Многим начинающим всегда кажется, что процедурное программирование проще. Не исключено что в этом есть доля правды, но давайте подумаем, какими терминами привыкли мы мыслить в повседневной жизни.

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

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

Есть три основных столпа ООП:

  • Инкапсуляция – возможность скрытия реализации каких то частей модуля или объекта от внешнего мира (от клиента).
  • Наследование – возможность использовать общий код для всех потомков наследованных от общего родителя.
  • Полиморфизм – возможность подмены некоторых методов или свойств для задания им другого поведения.

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

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

Класс – это как бы аналог чертежа, на основании которого можно построить много одинаковых домов – объектов. Поэтому класс только описывает объект, но не создает его.

  1. Трэкбеков пока нет.
  1. 18 октября 2011 16:03 | №1

    Забыли еще про абстракцию.

  2. 18 октября 2011 16:36 | №2

    Нет, не забыл, она не входит в три столпа ООП, а неявно она используется в наследовании и в полиморфизме, так что это просто часть целого :). Кстати подробно о всех трех столпах описано в следующем посте и там же приведен пример асбтракции для класса Shape

:D :) ^_^ :( :o 8) ;-( :lol: xD :wink: :evil: :p :whistle: :woot: :sleep: =] :sick: :straight: :ninja: :love: :kiss: :angel: :bandit: :alien: