Как объяснить блондинке объектно-ориентированное программирование?
На примере php. Подразумевается, что самые азы программирования блондинка знает.
Действующие лица:
- Преподаватель (П.)
- Блондинка (Б.)
Диалог
П.: Сейчас я тебе объясню принцип объектно-ориентированного программирования
Б.: Ну даю… ой… хи-хи, то есть дааавате, объясняйте.
П.: Ну так вот. Представь себе, что ты пошла в какой-нибудь магазин…
Б.: Ещё б скааазали “гастраааном”. (скривила лицо) Я в бутики толька хааажу.
П.: Ну хорошо, зашла ты в бутик. И увидела там шубу.
Б.: норкаваю!
П.: Да, норковую! И захотела купить. Шуба – это объект, который ты хочешь купить. А вообще Шубы – это класс объектов. В этом классе могут быть различного вида шубы от искуственного меха до соболя. В коде это можно написать:
class Shubi {
public $tip;
}
, где public означает, что кто угодно может узнать какой тип шубы ты купила.
Б.: Кто угодна? И даже Танька Синявская?
П.: Ну если Танька Синявская приедет и увидит твою шубу, то да.
Значит ты хочешь купить объект, т.е. шубу, которая принадлежит классу “Шубы”. Чтобы это было так, нужно написать:
var $shuba1 = new Shubi();
- var – это типа “ХАЧУ”;
- new – это типа “купить новую”
Б.: А пачиму shuba1?
П.: Ну а ты разве одну шубу только купишь?
Б.: А, ну дааа… (делает вид, что понимает) А, что, я так вот сразу куплю шубу без примерки?
П.: Конечно нет. Всё верно. У шубы есть свойства, например, размер. Добавим в класс Shubi это свойство, а потом укажем, какой размер у этой шубы. В итоге код у нас получается такой:
class Shubi{
public $tip;
public $razmer;
}
$shuba1 = new Shubi;
$shuba1->tip = "norka";
$shuba1->razmer = 53;
Б.: Я что толстая тааакая? У меня Соракдивяяятый рааазмер!
П.: Ну хорошо, хорошо. Размер 49. Дальше: Купив шубу, задали её размер. А размер – это свойство объекта. И для расчётов можем его получить написав:
$razmer_shubi = $shuba1->razmer;
т.е. если мы хотим узнать, чему равно какое-нибудь свойство, то нам нужно написать имя объекта, добавить такую стрелочку “->” и написать свойство объекта.
Б.: Ну паняла, не дура я. (надулась)
П.: Замечательно! Ну, а после того как ты купила шубу, что ты сделаешь?
Б.: Нааадену и паеду пааадружкам хвастать.
П.: Ага, значит оденешь. Значит совершишь действие. Значит это мы напишем так:
$shuba1->odetj();
Что означает, что ты одела шубу. Это называется метод и записывается этот метод в классе в виде функции:
class Shubi{
public $tip;
public $razmer;
function odetj(){
return true;
}
}
Б.: А зааачем odetj со скобочкамиии?
П.: А в скобочки записываются параметры действия. Вдруг ты захочешь одеть её задом на перёд.
Б.: Я что, дура что лиии?
П.: Да.
Б.: Чтооо? (в глазах ярость, рука воинственно поднялась, сверкнув ногтями)
П.: Ой, в смысле, да нет, конечно. Например, ты не захочешь застёгивать её совсем, а оставить пару пуговичек растёгнутыми.
Б.: Ааа, ну ладно. Ааа, как это записать?
П.: ну, например, так:
$shuba->odetj(2);
Б.: Что значит “напримееер”? Может быть подругомууу?
П.: Может. Это зависит от того как описать класс Shubi.
Б.: Бааалин, ещё это в Shubi записывать!
П.: Ну да, смотри:
class Shubi{
public $tip;
public $razmer;
function odetj($pugovici){
return $pugovici;
}
}
у всех шуб, есть каие-то определённые свойства: размер, цвет…
Б.: Цвет может быть разный.
П.: Конечно, но совсем никакого цвета не бывает. Хоть какой-то цвет будет. Значит свойство “цвет” будет у каждой шубы. Вот как узнать какой цвет у твоей шубы.
Б.: Пасмааатреть на неё.
П.: нет, я и мею в виду в коде.
Б.: Ааааа… ну, наверна, так:
$cvet_shubi = $shuba1->cvet;
П.: Умничка! (Блондинка сияет) Только предварительно нужно добавить это свойство в класс Shubi. Как?
Б.: Наверна, так:
class Shubi{
public $tip;
public $razmer;
public $cvet;
function odetj($pugovici){
$rasstegnutie_pugovici = $pugovici;
return $rasstegnutie_pugovici;
}
}
П.: Только прежде, чем получить цвет у шубы, нужно задать этот цвет. Это можно сделать либо в классе Shubi, тогда все создаваемые шубы будут одного цвета, хотя не проблема их перекрасить. Либо, ты можешь получить шубу без определённого цвета и сама назначить её любой цвет.
Б.: Ага, вот чтоб тааак в жизни было. Одела шубу и скааазала “хачу белую, нет, хачу чёрную”…
П.: Дааа… программировать и создавать, практически синонимы.
Ну и ещё объекты имеют методы, т. е. действия которые можно совершить с шубой. Теперь сними шубу.
Б.: Ага. Выключите свет.
П.: Что?
Б.: Ой, хи-хи… в смысле написааать?
П.: Ну конечно!
Б.: Снимаю (пошлый смешок):
class Shubi{
public $tip;
public $razmer;
public $cvet;
function odetj($pugovici){
$rasstegnutie_pugovici = $pugovici;
return $rasstegnutie_pugovici;
}
function snjatj(){
return true;
}
}
$shuba1->snjatj();
П.: Великолепно! Ну хватит с тебя на сегодня.
Б.: Пабииигу, по бутикам пока не закрыыылись!





]]>Sam]]>Отлично!
»]]>Danaki]]>Из цикла Как “Петя Бейсиков Тоню Соображалкину программировать учил”
»]]>Никита]]>Что-то вроде. Примерно так я объясняю на курсах, только вместо шубы – стол класса Столы, со свойствами: цвет, ширина, длина и т.д.; методами: поднять, развернуть, перетащить, перевернуть и т.д.; и внутренними объектами: ножка1, ножка 2…
»]]>Игорь]]>А нам рассказывали про мясо и мясорубку. Если используются функции, то ты говоришь: “Мясорубка, моли!” и передаешь мясо, как параметр. В случае с ООП ты говоришь мясу: “Молись!” и оно молит себя само
»]]>Никита]]>Молись, мясо! Пришёл твой конец!
»]]>Aktuba Blog » Как объяснить блондинке объектно-ориентированное программирование?]]>[...] Источник: http://www.seleckis.lv [...]
»]]>German]]>А продолжение будет? Очень понравилось!
А если без класса, на функциях писать, то нужно будет создавать шубу, и для каждой шубы создавать размер, цвет и пуговицы.
А с классами, один раз создаёшь и потом переопределяешь. Я правильно понимаю?!
»]]>PHP]]>[...]
»]]>Никита]]>Продолжение будет, но попозже
»]]>Lexa]]>прекольно, и сам немного понял. Зафрендил
»]]>Особь]]>Показал немцам (http://www.it-ru.de/forum/viewtopic.php?t=116270) эту страницу…
»Они порезвились.
Женщинам и слабонервным – не смотреть!
]]>Никита]]>Блондинка выступает в роли движка php – интерпретатор. Единственный объект – шуба. А метод Odetj только лишь возвращает true или false.
»]]>Ипотечный брокер]]>Почитал комменты немцев, валялся…
»]]>Дмитрий]]>Прикольно! Жаль раньше об этом блоге не слышал…учил по книгам ООП.
»