Форум Vikpro.net — это площадка для общения и обмена опытом форекс трейдеров со всего мира. Здесь вы можете найти ответы на свои вопросы, поделиться своими знаниями и идеями с другими пользователями.
📜 Посвящается всем, кто не может перейти с функций на классы — и не понял, что ООП это ещё не конец, а всего лишь только новый уровень игры.
Объектно-Ориентированный Принц
Глава 1. Эпоха чисел и комков кода
Когда-то, в стародавние времена, в закоулках холодных серверных, где кулеры гудели как мантры программистов, жил-был Ричард "Процессорное сердце". Ричард был кодером. Причем кодером не простым, а тем, кто писал на Ассемблере. Его код был как каменный топор : груб, но работал.
Ричард — парень с характером. Очки с толстыми линзами, вечный худи с принтом «Trust me, I'm root», рюкзак с нашивкой "void main", кеды с облупленным логотипом Linux и уставший взгляд человека, который компилировал ядро вручную. Он не мыл кружку с кофе, он её компостировал. Но в душе он был рыцарь. Просто вместо меча — клавиатура, вместо лошади — старенький ноутбук, а вместо доспехов — пятна на джинсах от энергетиков.
У него было правило: «Функции — для слабаков. Всё и сразу!» Его программа — это был один файл на 5000 строк без единого пробела и с переменными типа a1, a2, b1, b2, c3, fff , и что они делают — не знал уже даже сам Ричард.
В пятницу вечером он наливал себе чай (ну ладно, иногда и не чай) и боролся с багами как Рыцарь с драконом. Только баги у него в коде плодились быстрее, чем тараканы в общаге.
Глава 2. Пришествие переменных
Однажды к Ричарду пришёл Леопольд.
Леопольд — кодер редкого склада: аккуратный, расчёсанный, всегда гладко выбрит, в клетчатой рубашке,
словно специально выпрыгнул из учебника по алгоритмам. Его флешка была всегда подписана. Его IDE была всегда на английском. Он писал коммиты с заглавной буквы и точкой в конце.
Леопольд сказал:
— Ричард, а давай ты не будешь в 15 местах писать 173 , а сделаешь переменную радиус ?
Ричард почесал бороду, поскреб лоб и сказал:
— Ну... может, ты и прав.
Так Ричард узнал о переменных. И жизнь его стала проще. Он теперь не искал 173 по всей программе, а просто менял радиус = 173; . Казалось, рай наступил.
Глава 3. Победа над однотипностью — массивы!
Но вот беда. У него было 500 переменных: цена1, цена2, цена3... , и каждая участвовала в цикле. Ричард начал сходить с ума. Он пытался завести блокнот, чтобы не забывать названия, но всё было тщетно.
И тут Леопольд снова пришёл:
— Используй массивы, брат!
И Ричард понял. Это была победа. Он ощущал себя героем — рыцарем, который наконец-то взял в руки не деревянную палку, а настоящий стальной меч! Он завёл массив цена[500] и чувствовал себя словно Гарри Поттер с новым заклинанием for (int i=0; i<500; i++) .
Глава 4. Рождение функций
Но через месяц у Ричарда опять началась лобная боль. Он понял, что 40 раз пишет один и тот же код — берёт радиус , считает площадь , выводит результат. А потом ещё добавляет «если площадь больше 1000 — тогда радоваться!». И так сто раз.
Тут снова появился Леопольд:
— Ричард, а ты не хочешь сделать функцию?
— Что за зверь такой?
— Смотри:
double ПосчитайПлощадь(double радиус) и внутри формула.
Потом просто вызываешь
ПосчитайПлощадь(r) и кайфуешь.
Ричард попробовал. И кайфанул. Уволил 2000 строк кода. Жизнь наладилась. Леопольд ушёл в закат, а Ричард стал великим — у него были переменные, массивы и функции. Он считал себя избранным.
Глава 5. Удар молотом одинаковости: структуры
Теперь у Ричарда было 100 разных сущностей, и у каждой — по 50 свойств. Он не понимал, что ему не хватает... и тут, как в кино, появилась она.
Её звали Классия. Она была ангелом из соседнего офиса. Вся в белом. Блузка полупрозрачная. Белоснежная юбка. Туфли, будто выкованы из абстрактных интерфейсов. Она заглянула к нему через плечо:
— А зачем ты держишь имя, возраст, баланс в отдельных переменных? Сделай struct , милый… — и подмигнула.
Он создал
struct Клиент {
string имя;
int возраст;
double баланс;
}
и радостно закричал: «Теперь у меня не куча переменных, а один клиент !»
Коллеги ахнули. Одни — от структуры, другие — от Классии. А третьи просто не верили, что она всерьёз заговорила с Ричардом.
Он чувствовал, как его мозг получает удовольствие. Это был дзен. Это был пик... или он так думал.
Но где-то в уголке расслабленной души зародилось странное ощущение. Как будто это — не конец. Как будто впереди что-то... БОЛЬШЕ.
Глава 6. Проклятие одинаковых функций
Прошло два года. Ричард теперь писал CRM-системы и торговых роботов. Его код состоял из 1000 функций, которые принимали миллион параметров: ПосчитайДоход(прибыль, налог, скидка, комиссия, валюта, курс, магическоеЧисло) .
Он путался в них как в проводах за старым системником.
— Бл...а! — кричал Ричард. — Почему сумма тут s , а там amount , а ещё там moneyTotal ?!
Он забыл, что делает каждая функция. Он устал. Он начал пить... больше чая.
Глава 7. Секреты Классии
Однажды, когда он особенно страдал от перегрузки аргументов, в офис вновь вошла Классия. Вся в белом, как будто вышла из UML-диаграммы. Подошла к Ричарду, присела на край стола и томно провела пальцем по его клавиатуре.
— Ты весь такой... сосредоточенный. — Она укусила край пера от стилуса. — А может быть, пора объединить свойства и поведение?
Она наклонилась и прошептала:
— Пусть у клиента будет не только имя , но и ОтправитьПисьмо() . Пусть объект сам знает, что он делает. Понимаешь?.. Инкапсуляция, Ричард. Ин-ти-м-инкапсуляция…
Её губы приблизились, он почувствовал аромат кофе и ванили... И в этот момент Ричард вскочил:
— ЧЕРТ! Точно! Надо создать класс!!!
Он метнулся к клавиатуре, задел кружку, кофе пролился на пол... но он уже не слышал.
Классия села, медленно провела рукой по своим бёдрам и с изумлением посмотрела на дверь, в которую улетел Ричард.
— Он... не заметил?.. — прошептала она. — Я самая красивая в фирме. Что я сделала не так?!
Глава 8. Вспышка. Катарсис. Рождение класса.
Ричард в ту ночь не спал. Он размышлял. Всё стало казаться ему куском мусора: переменные, функции, даже структуры. Это были солдаты без генерала. Разрозненные рыцари без короля.
Он бросился к клавиатуре. Пальцы дрожали. Он создал свой первый класс:
class Клиент {
string имя;
int возраст;
double счёт;
void Купить() {...}
void Продать() {...}
};
Он посмотрел на экран. И понял — он больше не просто Ричард. Он теперь — Архитектор. Властелин Объектов. Господин Инкапсуляции.
Глава 9. Отказ от Принцессы
Когда Классия вновь появилась, чтобы поздравить его, он даже не поднял глаз.
— Ты была права, — сказал он. — Но теперь... я выше этого. Я сам создал структуру мира. Мне больше не нужны подсказки.
Классия посмотрела на него с лёгкой печалью. В её глазах было понимание. Она кивнула и исчезла навсегда.
Он даже не попрощался.
И вот тут... появился Леопольд. Он медленно подошёл к Классии:
— Эй... может, объяснишь мне, как это работает? Я только что дошёл до структур.
Классия улыбнулась и, впервые за день, почувствовала тепло в сердце. Они ушли вместе. Вечерами она объясняла ему ООП, а он... слушал. Слушал внимательно.
Глава 10. Финал? Или начало чего-то большего...
Прошли годы. Ричард стал великим.
Его звали на конференции, ему писали юные программисты с вопросами. Он вёл курсы: "ООП за 24 дня".
Но однажды он открыл ноутбук, а там...
Была новая парадигма. Что-то, что делало даже ООП похожим на деревянную палку. Новая Принцесса. Новая структура. Новый мир.
Он не знал, готов ли он к этому.
Он посмотрел на свой старый класс MyRobot , закрыл ноутбук... и ушёл в ночь.
Спасибо вам за выбор Форума VikPro Портала, как место общения!