Показаны сообщения с ярлыком ООП. Показать все сообщения
Показаны сообщения с ярлыком ООП. Показать все сообщения

16 июн. 2015 г.

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

Ponatiya_OOP

Grady__BoochНу вот мы и добрались до ООП :) И теперь надо определиться с основными понятиями, так как жить и кодить надо  по понятиям :)

Понятия объектов и классов, вкратце, мы уже обсудили в начале предыдущего раздела.

Теперь же рассмотрим понятие объекта от авторитета – Гради Буча (мужик на фото справа).

 

Объект — это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области.

Объектно-ориентированное программирование  — парадигма программирования, в которой программа строится из взаимодействующих объектов.

Объекты могут взаимодействовать друг с другом посредством сообщений (вызовов методов объектов). Эти методы могут менять внутреннее состояние (данные или поведение) объектов или же получать данные о состоянии объекта.

Объект является экземпляром класса. Классы описывают объекты, как бы являются шаблонами, на основе которых создаются объекты.

Чтобы понять как представить (описать) объект в классе надо уяснить еще несколько понятий. Этим понятиям в книгах по программированию обычно посвящены целые главы. У меня же нет ни какого особого и не особого желания описывать все это так же долго, нудно и подробно. Для этого есть книги и полно материалов в сети, в том числе и видео. Поэтому, для порядка, я приведу очень короткие определения данных понятий.

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

Мощное средство применения абстракции — применение иерархических классификаций. Это позволяет упрощать семантику сложных систем, разбивая их на более пригодные для управления фрагменты.

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

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

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

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

Возможно все это сейчас не очень понятно, но когда приступим к практике все встанет на свои места, а пока можно почитать более подробно тут. Надеюсь что этот сайт еще проживет какое-то время. Там девушка Мария очень не плохо и местами забавно все подробно объяснила на пальцах. Чисто конкретно так :)

Ну или Google и Youtube вам в помощь.

Хотя приведу несколько не плохих видео по данной теме:

ООП. Часть 1.

 

ООП. Часть 2.

 

Понятие ООП

 

Введение в ООП

4 мая 2015 г.

Введение в объектно-ориентированные программирование (ООП)

До сих пор, мы хотя и сталкивались с классами и их экземплярами, но делали это лишь из необходимости использования в примерах, когда разбирали примитивные типы и операторы.

Теперь же настало время ООП! Улыбка

Но мы начнем эту тему постепенно, дабы не сломать голову. Хотя на самом деле сложного в этом ни чего особо нет, главное усвоить несколько, достаточно простых, понятий. И одно из них это класс и объект.

Класс — это шаблон или образец, по которому будет сделан объект. Обычно класс сравнивают с формой для выпечки печенья, а объект — это само печенье. Конструирование объекта на основе некоторого класса называется получением экземпляра этого класса.

Экземпляр – на английском instance, поэтому иногда говорят инстанцировать класс, то есть получить или создать объект класса.

Классы состоят из
  • полей данных (data fields), то есть мест для хранения данных, по существу это переменные или константы
  • методов (methods), то есть кода, который воздействует на данные класса или переданные классу данные, или выполняет какие-либо действия.
Определенные внутри класса методы и поля вместе называют членами класса.

Сейчас пока надо усвоить разницу между классом и объектом класса. Класс – это шаблон (описание) по которому создается реальный объект.

На этом с теорией пока все. Далее будем уже практиковаться, на более менее знакомых вещах, а именно на классах обертках для примитивных типов. На мой взгляд так будет проще въехать в классы и их объекты.