Ответы к посту
Поговорим про ооп
112

Ответ на пост «Поговорим про ооп»

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

Чем класс в данном контексте отличается от функции? У класса есть свойства и методы. Это такой свод правил для каждой специальности - для бетонщиков, для штукатуров, для маляров - для каждой специальности отдельно. Когда вы нанимаете пять маляров, вы создаёте пять экземпляров класса маляр. У класса есть свойства. Это например возраст маляра, его рост (мелким малярам сложнее работать без стремянки), вес (некоторым малярам возможно понадобится более основательная стремянка), имя и например оклад. Набирая пяток маляров свойства у каждого из них будут отличаться и как говорит известная телеведущая - это нормально. А вот методы работы у них должны быть строго одинаковые!

Теперь к наследованию. Если мы пойдём в истории нашей бригады чуть назад, то мы поймём что все они строители (базовый класс - строитель), все они имеют некий общий набор свойств перечисленных выше. А вот уже от строителей отходят классы наследники - штукатуры, маляры и бетонщики. При этом каждый базовый "строитель" умеет таскать песок - то есть наши специализированные классы унаследовали от родительского такую возможность и в ООП это называется наследованием. Но иногда вы нанимаете шикарного маляра, который говорит: "я кароч песок таскать не буду, но зато смотри как шикарно я крашу!" И тогда это уже другой класс маляра - маляр-профессионал. Ему негоже таскать песок, но красит на пятёрочку и по другим методикам - это называется полиморфизм. На попытку заставить его таскать песок он ответит отказом, а покрасит лучше простого маляра. Это потомучто он переопределил в себе методы родителя CarryingSand() и PaintingAWalls(). Теперь к инкапсуляции. Если методичка по покраске стен написана хорошо, верно и конкретный Махмуд не несёт отсебятины, то результат предсказуем и повторяем. И самое главное нет нужды стоять у него над душой и контролировать процесс. В жизни так конечно не бывает, но мы предположим, что такие чудесные люди существуют в этом мире. Вот в таком случае считается что метод инкапсулирован и не важно что делает ваш маляр - важен итоговый результат или мотивированный отказ с указанием причины почему это сделать невозможно (например нет сен под покраску). Это конечно сильно утрированный пример, но зато понятнее для обывателя.

Показать полностью
65

Поговорим про ооп

Серия ООП

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

Мем из интернетов

Мем из интернетов

Попробую вкратце описать суть разных подходов. Однако, надеюсь, что вы и так их представляете. Потому что, описать кратко да так, чтобы было понятно будет трудно.

Итак, говорят, что существует две основные парадигмы программирования. Часто одну называют функциональной, а вторую объектно-ориентированной. Однако в статье Яндекса к этому понятию подходят более широко.
Ну, нам теоретические нюансы не важны, будем считать, что сначала программы писали как последовательность команд. Компьютер эту последовательность выполнял и программист получал какой-то результат. Позднее программы стали больше и сложнее и в них появилось много повторяющихся операций, тогда программисты придумали использовать функции.
Функция - часть программы, оформленная для многократного использования.
Такие функции можно вызывать из любого места в основной программе и вызывать их множество раз. Таким образом, вместо 10 одинаковых команд в двух разных местах, мы можем вызвать одну и тужу функцию в двух местах программы и сэкономить время, силы и размер программы.

Еще позднее функций стало недостаточно и программисты придумали классы и объекты.
Класс - часть программы, которая может содержать внутри функции и переменные, оформленная для многократного использования в более сложных конструкциях.
Предположим, мы хотим создать программу, которая выведет строку "Hello, world!" несколько раз.
На PHP это будет выглядеть, например так:

Здесь три команды вывода текста на экран. Поэтому удобно использовать функцию:

<?php
echo 'Hello, world!';
echo 'Hello, world!';
echo 'Hello, world!';
?>

Если вдруг, мы захотим внести изменения в программу и выводить другой текст, или, например, добавить перевод строки после текста, нам придется изменить только одну функцию в одном месте. А вызов функции останется неизменным.

<?php
function hello(){
echo 'Hello, world!';
}
hello();
hello();
hello();
?>

Что на счет ООП?

Создадим класс Текст. Он будет печатать текст и хранить этот текст внутри себя.

<?php
class Text{
public $text = 'Hello, world!';
function printText()
{
echo $this->text;
}
}
$hello = new Text();
$hello->printText();
?>

Здесь у нас класс Текст. У него есть общедоступное свойство текст, которое равно "Hello, world" и метод, который выводит этот текст на экран. Из такого простого примера не очень понятна выгода классов по отношению к простым функциям. Однако такой класс имеет рад преимуществ.

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

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

В-третьих, наследование, полиморфизм и паттерны программирования. Здесь скрыта магия ооп. Но раскрыть ее в одной статье будет, пожалуй, невозможно.

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

В будущих статьях я попробую описать все основные моменты работы с ооп. Попробую разобраться в ни сам и объяснить заинтересованным. Так что, присоединяйтесь.

В заключении. Если мои странные объяснения показались или могут показаться вам полезными, присоединяйтесь на пикабу и на ютуб. Ссылка в профиле. Осторожно, видео на непонятном языке.

Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества