Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Игла в яйце, яйцо в утке, утка в зайце...
Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011 Откуда: Moscow
Помог: 0 раз(а)
Допустим предположим например:
Нужно описать какую-то группу абстракций, причем иерархическую
Ну например:
человек (класс)
у каждого человека есть конечности (класс)
у каждой конечности есть пальцы(класс)
3 уровня
каждый палец знает к какой конечности он принадлежит
и каждая конечность знает какие пальцы у нее есть
тоже самое с людьми которые знают о конечностях но не знаю напрямую о пальцах
и собственно вопрос:
создавая экземпляр "верхнего класса"(человека в данном случае) нужно ли за ним создавать экземпляры его конечностей (как его переменные), а создавая конечности нужно ли создавать сразу пальцы?
часто получается так что есть экземпляр верхнего уровня (человека) и нужно что-то сделать с его под-под экземплярами(пальцами)
Понимаю что можно и так и так, но хотелось бы понять как правильно и какой подход более ООПшный.
Stierus
Отправлено: 12 Октября, 2011 - 16:26:53
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Не очень понял, а в чем вопрос-то ? Если вас смущает изрядное потребление ресурсов, заранее не зная, потребуются ли нам экземпляры нижележащих классов - почитайте про lazy load (http://www.design-pattern.ru/patterns/lazy-load.html) .
caballero
Отправлено: 12 Октября, 2011 - 17:07:04
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Понимаю что можно и так и так, но хотелось бы понять как правильно и какой подход более ООПшный
.
Нужно решать конкретную задачу а не мерятся ООПешными пиписками.
Если по логике вложенный екземпляр должен знать о своем владельце значит надо
не должен значит ссылку на владельца передавать нет смысла
Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011 Откуда: Moscow
Помог: 0 раз(а)
caballero пишет:
Цитата:
Понимаю что можно и так и так, но хотелось бы понять как правильно и какой подход более ООПшный
.
Нужно решать конкретную задачу а не мерятся ООПешными пиписками.
Если по логике вложенный екземпляр должен знать о своем владельце значит надо
не должен значит ссылку на владельца передавать нет смысла
А как это понять? "По логике" не получается.
У меня такая практическая иерархия:
Есть филиал, в филиале несколько устройств, у устройства несколько интерфейсов к интерфейсам привязаны каналы.
Вот при создании экземпляра "филиал" как должно выглядеть? У него должно сразу создасться как члены все устройства, у которых сразу создасться все интерфесы....
при том что задача "понять какие каналы связаны с данным филиалом" - очень даже актуальна. Да я знаю что можно наваять функцию "получить все каналы филиала" а потом "получить филиал к которому привязан данный канал" и потом еще костылей... но что-то в этом не то Вам не кажется?
Stierus
Отправлено: 13 Октября, 2011 - 09:46:08
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Нет, не должно. Вы должны описать интерфейс ваших классов, из этого интерфейса будет ясно, как лучше все организовать. Еще раз прошу прочесть про lazy load .. с каждым новым вашим постом, все больше прихожу к мысли, что это то, что вам нужно.
ps
Цитата:
Да я знаю что можно наваять функцию "получить все каналы филиала" а потом "получить филиал к которому привязан данный канал" и потом еще костылей
не очень понял про костыли ... функция "получить всех потомков" в классе-родителе с каких пор стала костылем ? о_О
Mad_Alex
Отправлено: 13 Октября, 2011 - 10:57:16
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011 Откуда: Moscow
Помог: 0 раз(а)
Stierus пишет:
Цитата:
не очень понял про костыли ... функция "получить всех потомков" в классе-родителе с каких пор стала костылем ? о_О
Канал не является потомком филиала, он является потомком интерфейса, который является потомком устройства, а вот оно уже есть потомок филиала.
Т.е. это не "сын", это "правнук".
Stierus пишет:
Еще раз прошу прочесть про lazy load .. с каждым новым вашим постом, все больше прихожу к мысли, что это то, что вам нужно.
В общем идея понятна, но там упор на экономию запросов.
В целом сенкс, буду копать. Но вопросы глупые все равно буду задавать
Stierus
Отправлено: 13 Октября, 2011 - 11:33:01
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Просто когда есть проблема - ее описывают, у вас же нет описанной проблемы. Нужно ли создавать пальцы, создавая руку? ... если вы хотите увидеть конечность - нужно, если ниже локтя вы смотреть не планируете - то зачем ? Смотрите свои задачи, разбирайтесь в необходимости и целесообразности, начните с описания API ... это те вещи, которые решать вам, т.к. всю картину видите только вы. Если же есть конкретная проблема - то ее можем обсудить. У вас нет даже просьбы дать совет ... советы на абстрактные вопросы не дают, это все равно что спросить: "а как мне туда попасть, на велосипеде, мотоцикле, машине, самолетом или троллейбусом?" ... куда попасть, что у вас есть и когда вам это нужно?
зы
Цитата:
В общем идея понятна, но там упор на экономию запросов
Это упор на экономию ресурсов ... в том числе и запросов. Понятное дело, что видеть целую руку удобнее, даже если вы не смотрите ниже локтя, удобнее, что бы было ве и в любой момент можно было бросить косой взгляд на кисть. Если вы задаетесь вопросом, нужно ли показывать эту самую кисть - значит по каким-то причинам, показать все для вас проблематично - единственно для меня логичным поводом является экономия ресурсов.
$body->getHand('right')->getFingers() это нормальная практика в ООП языках. А с помощью lasy load еще и не такая затратная
Mad_Alex
Отправлено: 13 Октября, 2011 - 11:45:34
Новичок
Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011 Откуда: Moscow
Помог: 0 раз(а)
Stierus пишет:
советы на абстрактные вопросы не дают
Собственно я хотел узнать "как правильно в теории?".
В суровой практике можно вообще без ООП все это сделать.
Stierus пишет:
$body->getHand('right')->getFingers() это нормальная практика в ООП языках. А с помощью lasy load еще и не такая затратная
О! Т.е. если нужно массив экземпляров пальцев при имении экземпляра body
$fingers = $body->getHand('right')->getFingers();
В смысле это не "так тоже можно", а это "нормально"?
Если так, то я удовлетворен. Сенкс!
caballero
Отправлено: 13 Октября, 2011 - 11:47:10
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Канал не является потомком филиала
Наведите порядок в своих мыслях - потомок это наследование
а у вас принадлежность экземпляра другому экземпляру
А что касается скорости работы - так можно подтянуть с базы все одним запросом
выгрузить в массив а нему уже бегать циклами
тоже не слишком элегантно зато просто и быстро
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Почитайте книгу "Философия Java" несмотря на то что книга по java, там хорошо изложено про Объектно-ориентированное программирование, что такое объекты, для чего они, как связываются между собой и тд. лишним не будет ни для кого.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.