Я лишь недавно начал работать с php, да и программистом в целом. Тем не менее уже столкнулся с проблемой поиска информации. Веб-технологии движутся семимильными шагами, и сейчас купленная полгода назад книга по php+js+mysql Робина Никсона совсем не актуальна. Не могу найти достойных уроков по ООП программированию на php + примеров проектирования mvc.
Все уроки, что мне доводилось читать, писали люди, явно начинающие, как и я, с процедурного кода. В их представлении писать на ооп, это создавать классы, а в них пихать кучу функций. Но ведь класс, это не контейнер для функций и переменных, это, на сколько я уже успел разобраться, отражение сущностей.
Что касается mvc в php, то об этом литературы еще меньше. Вот и возникает вопрос, как тут не говнокодить? Для меня хороший урок, это пример, в котором на ооп, следуя mvc, пишут небольшой проект, охватывающий как можно больше стандартных тематик веб-разработки (написание аутентификации, ролевой модели итп.)
Ребят, кто-нибудь, посоветуйте хорошую литературу/источник, где были бы раскрыты данные темы.
Заранее спасибо =)
Спустя 5 часов, 42 минуты, 38 секунд (1.04.2012 - 08:00) alex12060 написал(а):
Поищи уроки от k0stix
Спустя 2 часа, 16 минут, 40 секунд (1.04.2012 - 10:17) twin написал(а):
Цитата |
Но ведь класс, это не контейнер для функций и переменных, это, на сколько я уже успел разобраться, отражение сущностей. |
Это еще почему? Тоесть ты хочешь сказать, что рюкзак, это не удобное приспособление для переноски разных ништяков, а отражение туризма?
Спустя 54 минуты, 43 секунды (1.04.2012 - 11:12) Bиталий написал(а):
"Первое, что необходимо понимать - класс это не набор функций или удобный контейнер для переменных, а абстрактный тип данных (АТД)."
Из "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В ЯЗЫКЕ PHP" Автор - Кондраков А.В. Ссылка -
Я это имел в виду. =)
Из "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В ЯЗЫКЕ PHP" Автор - Кондраков А.В. Ссылка -
Я это имел в виду. =)
Спустя 2 часа, 20 минут, 20 секунд (1.04.2012 - 13:32) caballero написал(а):
Bиталий
если ты новичек то чего ты полез в MVC?
Хотя бы с ООП разберись.
если ты новичек то чего ты полез в MVC?
Хотя бы с ООП разберись.
Спустя 28 минут, 19 секунд (1.04.2012 - 14:00) glock18 написал(а):
Цитата (twin @ 1.04.2012 - 07:17) | ||
Это еще почему? Тоесть ты хочешь сказать, что рюкзак, это не удобное приспособление для переноски разных ништяков, а отражение туризма? |
класс как раз и есть отражение сущности, а объекты - экземпляры сущности. Их в программирование и ввели в первую очередь по той причине, что с их помощью проще описать жизненные процессы/зависимости.
про рюкзак и туризм не шибко хорошая аналогия, если честно.
Bиталий, ты владеешь "тайным" знанием, и знаешь для чего именно классы есть Осталось только понять как это все воплощать в коде, хороших и простых примеров я, увы, тебе предложить не могу. Можешь поковырять какой-нибудь фреймворк попроще, типа Yii - посмотрите как реализованы связи в приложении, разберитесь какие на самом деле эти сущности, которые в нем задействованы. Думаю, что результат не заставит ждать
twin
Представление, что класс нужен для удобного хранения функций не очень полезно. Я помню, как ты жаловался на то, что периодически приходится работать с классами размером в 100_500 строк - вот такие классы один из возможных результатов такого представления о классах.
С другой стороны, если фанатично следовать принципу "класс - есть отражение сущности", то иногда это выливается в неумную жажду находить все новые сущности, после чего они могут расплодиться и превратиться в итоге в еще более страшное творение, чем один класс в 100_500 строк - 100_500 классов по 3 строки.
Потому просто не нужно усердствовать ни с тем, ни с другим. Безусловно, класс удобен в качестве рюкзака, но в первую очередь он должен представлять правильную сущность
Спустя 3 минуты, 20 секунд (1.04.2012 - 14:04) glock18 написал(а):
Ну да, вот еще что. Разных сущностей, даже в больших фреймворках обычно бывает не очень много. Главное их суметь выделить и правильно огранизовать
Спустя 26 минут, 17 секунд (1.04.2012 - 14:30) twin написал(а):
Цитата (Bиталий @ 1.04.2012 - 08:12) |
"Первое, что необходимо понимать - класс это не набор функций или удобный контейнер для переменных, а абстрактный тип данных (АТД)." Из "ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В ЯЗЫКЕ PHP" Автор - Кондраков А.В. Ссылка - Я это имел в виду. =) |
Ненене. Причем тут ООП вообще. Я про классы говорю как инструмент. И ООПэшники мне тут не авторитет. Пусть Кондраковы всякие и представляют себе программу как какой то абстрактный аморфный механизм из каких то сущностей. Для меня программиревание это в первую очередь набор команд, которые должен выполнить комптютер, а не "объект-собака", "метод-лает", "свойство-лохматая". Я проповедую четкое и прозрачное программирование и привык оперировать функциями а не собаками. И в своей практике очень запросто использую классы именно как удобный набор функций. А посему я возмущен такой постановкой вопроса. Если для Кондракова этого (кто это вообще?) класс это абстрактный тип данных - флаг ему в руки. Ему удобно - пусть. Но так вот безапелляционно заявлять, что класс не набор функций - не видеть ничего дальше своего носа. А люди то принимают за чистую монету: в книге же написано.
glock18
Цитата |
про рюкзак и туризм не шибко хорошая аналогия, если честно. |
Отличная аналогия. Человек заявил однозначно - раз у тебя есть рюкзак - ты турист и иди в поход. А я вот с рюкзаком в погреб за картошкой хожу. Нееет. Нельзя. Моветон. Рюкзак для туризма и точка.
Цитата |
Я помню, как ты жаловался на то, что периодически приходится работать с классами размером в 100_500 строк - вот такие классы один из возможных результатов такого представления о классах. |
Ты наверное напутал. Я как раз всегда жалуюсь на то, что функционал рассован по наследникам и собрать этот пазл воедино не так то просто. Куда проще разобраться с классом в 500 строк, когда он весь перед глазами.
Спустя 7 минут, 47 секунд (1.04.2012 - 14:38) caballero написал(а):
Цитата |
Для меня программиревание это в первую очередь набор команд, которые должен выполнить комптютер, а не "объект-собака", "метод-лает", "свойство-лохматая". Я проповедую четкое и прозрачное программирование и привык оперировать функциями а не собаками. |
это просто процедурный поход а речь именно об ООП а не об использовании классов как контейнеров для функций.
Цитата |
функционал рассован по наследникам и собрать этот пазл воедино не так то просто. Куда проще разобраться с классом в 500 строк, когда он весь перед глазами. |
и первое и второе - разновидности говнокодирования или неграмотного построения архитектуры.
Спустя 1 минута, 6 секунд (1.04.2012 - 14:39) m4a1fox написал(а):
Опять начинаем извечный спор... Это уже похоже на риторический вопрос по типу: Что раньше появилось - курица или яйцо? Черное и белое... и так далее. Первое - то мнение что вы сейчас озвучите - только Ваше, и ни кого из присутствующих вы переубедить не сможете! Вопрос - есть ризон в этом?
Спустя 9 минут, 6 секунд (1.04.2012 - 14:48) glock18 написал(а):
Цитата (twin @ 1.04.2012 - 11:30) |
Ему удобно - пусть. Но так вот безапелляционно заявлять, что класс не набор функций - не видеть ничего дальше своего носа. А люди то принимают за чистую монету: в книге же написано. |
Николай, ты очень сильно заблуждаешься. Класс - неотъемлемая часть ООП. То что их можно использовать иначе, вовсе не значит, что так делать нужно. Потому тебе не стоит свое видение за чистую монету выдавать.
Предложенное высказывание как раз то, чему учать в любом нормальном вузе программистов. Рассмотрение класса как удобного набора функций не считает говнокодом в некоторых масштабах только в php. В любом компилируемом языке программирования с нормальной реализацией ООП такой подход совершенно неуместен.
Ну да я понимаю, что тебя переубедить не удастся, но просто прекрати умы смущать. Твоя личная неприязнь к ООП принуждает тебя быть необъективным в его отношении.
Спустя 48 минут, 48 секунд (1.04.2012 - 15:37) Гость_Michael написал(а):
гыгы, зачетно твишку подловили с высказыванием из книжки.
Спустя 15 минут, 57 секунд (1.04.2012 - 15:53) twin написал(а):
glock18
Цитата |
это просто процедурный поход а речь именно об ООП а не об использовании классов как контейнеров для функций. |
Разве? Это не процедурный подход. Это нормальный подход, в котором используется все на своих местах. И который, кстати, не исключает и ооп составляющую. Стоит почитать мой урок в школе по созданию сайта, чтобы легко в этом убедиться. Однако вот с этим я не соглашусь никогда:
Цитата |
Николай, ты очень сильно заблуждаешься. Класс - неотъемлемая часть ООП. То что их можно использовать иначе, вовсе не значит, что так делать нужно. Потому тебе не стоит свое видение за чистую монету выдавать. |
Это рассуждение про рюкзак. Если ты ООПэшник (турист), для тебя использовать класс (рюкзак) для организации пространства имен и контейнера для функций (похода за картошкой) кощунство и прелюбодеяние.
Да ради бога, я никого не переубеждаю и даже не настаиваю на своей правоте. Я всегда прошу только об одном. Не нужно однозначно заявлять про классы, как часть ООП. ООп не может обойтись без классов - факт. Но классы довольно легко и вольготно чувствуют себя и без ООП. А вы их прихватизировали и объявили "неотъемлемой частью".
Молоко бывает козье и верблюжье, грудное женское, птичье, соевое, кокосовое и много других. Если ты работаешь в коровнике, это не значит, что молоко не обязательно производное коровы.
И да, вопрос рассматривается в рамках PHP естественно. Против других языков ничего не имею))
UPD
Michael
Цитата |
гыгы, зачетно твишку подловили с высказыванием из книжки. |
Меня??? Это я подловил, так как знал, что обязательно приведут какой-нибудь подобный аргумент. Таких высказываний полно, даже у нас на форуме много раз встречалось. Эта "крылатая фраза" про контейнер меня давно бесит. Копипастят туда-сюда не разобравшись и на слово веря.
Спустя 9 минут, 52 секунды (1.04.2012 - 16:03) Bиталий написал(а):
Ребят, спасибо всем, кто высказался 'за', не меньше спасибо тем, кто 'против'. И тем не менее вопрос был простой - кто-нибудь может посоветовать, где почитать пошаговые, доступные примеры написания задач на ооп php с использованием архитектуры mvc? Пока что по теме высказался только alex12060, за что ему отдельное спасибо. =)
Вот интересный пример на хабре (тут же можно давать ссылки на хабр? о_О). Но пока что это единственное, что удалось откопать.
Вот интересный пример на хабре (тут же можно давать ссылки на хабр? о_О). Но пока что это единственное, что удалось откопать.
Спустя 6 минут, 58 секунд (1.04.2012 - 16:10) twin написал(а):
Ну вот тут можно много интересного узнать.
Спустя 7 минут, 14 секунд (1.04.2012 - 16:17) Гость_Michael написал(а):
ну конечно ты подловил, день то какой сегодня веселый, день дураков
Спустя 4 минуты, 45 секунд (1.04.2012 - 16:22) caballero написал(а):
Цитата |
Разве? Это не процедурный подход. Это нормальный подход, в котором используется все на своих местах. |
Это именно то что называют парадигмой процедурного програмирования. На местах или нет это уже определяется профессионализмом программиста независимо от выбранной парадигмы..
Цитата |
где почитать пошаговые, доступные примеры написания задач на ооп php с использованием архитектуры mvc? |
доступно - это в википедии. Но если ты пролистаешь этот форум то увидишь что между теоретизированием на тему MVC и практическим применением - пропасть, причем для людей с опытом программирования меньше одного-двух лет как правило непреодолимая. Главная причина, как я неоднократно писал, MVC в PHP - извращение. Даже обычное ООП в PHP, не поддерживающем персистентность объектов, не так эфективно как в например в Java
Спустя 15 минут, 17 секунд (1.04.2012 - 16:37) glock18 написал(а):
цитируя ТСа
Цитата |
В их представлении писать на ооп, это создавать классы, а в них пихать кучу функций |
twin, стоит ли повторять, что речь об ООП в этой фразе? не надо тут о php-подходах типа ПООП или ОПОП (процедурно-объектный )
Учиться программированию, ориентируясь на стандарты php, губительно. Учиться приемам программирования нужно так, как они изначально предполагаются. После освоения приемов, можете делать со своими знаниями что хотите - в том числе вносить корректировки в них с учетом среды в которой работаете. Но никогда это не должно отражаться на изначальном знании.