Как не надо понимать объектную ориентацию (Рейтинг: +6)

Печать / RSS
Здравствуйте.
Перечитывал несколько раз статьи этого блога и решил пока не заниматься переосмыслемиен парадигмы, а затронуть вопрос неверного толкования при первом знакомстве с ООП.
Другими словами чем не является объектная ориентация и как не стоит ее применять.
1. Конечно же сначало нужно выбросить из головы такое понятие как класс и посмотреть вокруг. Понимание принципов ОО начинается с осмысления того, что такое окружающие нас объекты и что они могут. Начинать изучение ООП с термина "Класс" это главная ошибка, сродни изучению программирования с определения функций (функции лишь способ группировки алгоритмов, а не алгоритм). И так что же такое объект? Возьмем что то простое, шар. Шар это объект с точки зрения ОО и логики. Какими словами можно описать шар? Ну скажем его плотностью, цветом, диаметром, материалом (прежде чем читать дальше, попробуйте продолжить список и назвать еще пару-тройку подобных характеристик шар). Хорошо. Шар имеет некоторые характеристики, с этим вроде понятно. Но вспомним сколько шаров есть с совершенно различными характеристиками. Игровые шары (футбольные и баскетбольные мячи, шарики для пинг-понга и т.д.), мячи технические (на пример в подшибниках), оружейные (ядра и пули). У них довольно много общего (попробуйте назвать одинаковые характеристики для разных шаров, на пример диаметр). Вот здесь на арену выходит "Класс". Класс - это совокупность общих характеристик разных объектов. На пример класс - футбольных мячей. Объекты этого класса будут конкретными футбольными мячами, какие-то более новые, какие-то более рваные, но характеристики их не будут отличаться, что впрочем нельзя сказать если сравнить их с объектами класса - ядро. Другими словами классы определяют и содержат общее для объектов. Создавая объект на основе класса, мы будем точно знать что этот объект содержит те же характеристики, что и его класс.
2. Теперь забудьте про функции в классах. Классы и объекты это не способ удобного хранения переменных и (что более актуально у новичков) функций. Класс это то общее что есть у его объектов, а характеристики класса и методы (функции) это то, что есть у всех объектов этого класса. В чем прелесть этого подхода. Вспомним получение от пользователя данных о его электронной почте. Нужно проверить все ли там правильно заполнено, а при необходимости резать адрес почты на части чтоб получить скажем его домен или логин. А теперь представьте что есть класс "АдресЭлектроннойПочты" который включает методы - получить весь адрес, получить логин из адреса, получить домен из адреса. И мы знаем что все объекты этого класса будут иметь эти методы и при их вызове мы всегда получим строку корректными данными не беспокоясь о подмене или безопасности. Более того, мы можем даже не знать как именно класс и его объекты хранят и возвращают эти данные, нам это больше не важно, единственно что нам важно, это то, что у них эти методы есть и они дают нам ожидаемые данные. Другими словами методы класса это те его функции, которые позволяют нам с его объектами взаимодействовать, изменять их, получать данные (которые может предоставить объект), заставлять делать что то, а не любые, возможно даже не связанные с объектом функции.
3. Медленно вытекающее из 2. Классы должны выполнять что то небольшое но хорошо. Это значит что включать в класс "адресЭлектроннойПочты" такие методы как "отправить письмо" или "найти в адресе подстроку" не правильно. Вдумайтесь в название класса - адрес электронной почты - это вам не - почтовый клиент - и тем более не - центр обработки строковых данных - это куски адресов почты которые имеют определенную структуру и не более того. Следовательно методы класса должны не выходить за рамки этой структуры.

Автор: Артур (13.12.11 / 02:03)
Не ооп, анти ооп
Рейтинг: +6
Просмотры: 1338
Комментарии (2) »