Всем привет!
Я почти никогда не читаю #книги по программированию, потому что тяжело воспринимаю информацию при чтении. Мне легче просмотреть 10 видеороликов, чем прочитать один учебник.
Но книга Мэтта Вайсфельда "Объектно-ориентированный подход" стала исключением из моих правил. Я даже купила ее в бумажном варианте, чтобы "разгрызть" от корки до корки. Хочу попробовать метод конспектирования, который, как говорят, помогает лучше усваивать материал. Что ж, проверим!
Зачем мне это нужно?
Я проходила несколько собеседований на должность #PHP-программист (джун или стажер, конечно же). И в некоторых вопросах #ООП, я, мягко говоря, "плавала". Такое ощущение, что работодатели просто обожают валить новичков этим ООП!
Если вам знакома эта ситуация, то предлагаю начать разбираться вместе со мной! И да! Я не пытаюсь переписать книгу, я хочу выделить из нее все самое полезное и рассказать простыми словами.
Итак, блондинка пытается понять...
Чем процедурное программирование отличается от ООП?
Задавая себе этот вопрос, я пытаюсь понять - для чего вообще нужно это ООП, ведь и без него все работает? То есть, я имею ввиду, что более старые системы, написанные в процедурном (структурном) стиле, до сих пор прекрасно справляются со своими задачами. Нужно ли что-то менять?
Вот и автор утверждает, что изменения только лишь ради внесения изменений вовсе не нужны. ООП и процедурный подход - не конкуренты. Они могут успешно взаимодополнять друг друга. ООП не призван полностью заменить ранее существующие парадигмы.
Но на протяжении последних 25 лет наблюдается значительный рост количества ООП-разработок. И это связано, прежде всего, с появлением интернета, потому что, объекты очень хорошо подходят для использования в сети.
Что такое объект?
Объект - это сущность, одновременно содержащая данные и поведение. Объекты - это строительные блоки ООП-программ.
В одном из слов этого определения как раз таки и заключается основное различие между объектно-ориентированным программированием и другими методологиями.
Отличия ООП от процедурного программирования
1. Размещение данных и логики. В процедурном программировании логика размещается в отдельных функциях (процедурах). В функцию передаются данные извне, а функция проводит с ними какие-то манипуляции и выдает результат.
В объектах ООП данные (атрибуты или свойства) и поведение (методы)
располагаются внутри объекта.
Объединение в одной сущности атрибутов и методов называется инкапсуляцией.
2. Доступ к данным. Как говорилось в пункте 1, данные при структурном программировании отделены от процедур и являются глобальными. Это позволяет получить к ним непредсказуемый и неконтролируемый доступ, что ухудшает тестирование и отладку кода.
При правильном проектировании ООП-системы нет такого понятия как "глобальные данные", что обеспечивает высокую степень их целостности.
3. Сокрытие данных. Объединение (инкапсулирование) атрибутов и методов внутри объекта позволяет управлять их видимостью и доступом к ним. Зачем это нужно? Я попыталась осмыслить это следующим образом:
Допустим, ты приходишь в магазин за хлебом и обращаешься к продавцу. Продавец кладет на прилавок свежую буханку с хрустящей корочкой. Тебе ведь не сильно важно как была изготовлена эта буханка, правда? Ты просто хочешь получить результат. А представь, если бы продавец вместо готового продукта "шлепнул" на прилавок пакет с тестом! Тебе пришлось бы идти домой, включать духовку и допекать хлеб самому.
Так и в мире ООП - первый объект обращается ко второму и получает результат в виде готовых данных. И первому объекту вовсе ни к чему знать какие действия внутри второго привели к получению этих данных, ему не надо уметь (в случае чего) "допекать полуфабрикат". И если метод получения данных во втором объекте в будущем изменится, то первому объекту не придется "переучиваться". То есть изменения коснутся лишь одного объекта и не нужно будет "перекраивать" всю систему.
В общем, я поняла это как-то так. Если я в чем-то ошибаюсь, то просьба тапками и помидорами не кидаться, а просто объяснить мне что к чему!
На этом прощаюсь совсем ненадолго! Подписывайтесь на мой блог, будем изучать #программирование вместе!