Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП, наследование всех классов 
:(
    Опции темы
solenko
Дата 13.8.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(bars80080 @  13.8.2009,  12:02 Найти цитируемый пост)
нечто среднее. грубо говоря, на входе адрес url, на выходе готовая страница,

Т.е. класс, который занимается ВСЕМ? 

Цитата(bars80080 @  13.8.2009,  12:02 Найти цитируемый пост)
собранная из разных модулей. авторизация создаёт массив прав для этих модулей для конкретного пользователя, 

И почему это должны быть разные классы? Не авторизирован -- это тоже состояние пользователя и набор прав. В чем отличия сборки?


Цитата(bars80080 @  13.8.2009,  12:02 Найти цитируемый пост)
фича с авторизацией и разгребанием дополнительных прибабахов занимает примерно столько же места, так что клепать в одно и таскать затем никакого желания нет

что такое дополнительные прибабахи? примерно столько же сколько и что и причем тут вообще мето? Таксать откуда куда?
И т.д. и т.п.

С телепатией  у меня, видимо не очень, потому как не видя кода не могу определить что такое "прибабах", в чем заключаются различия в сборке и т.д.


Цитата(bars80080 @  13.8.2009,  12:02 Найти цитируемый пост)
ну, я уж не знаю как подробнее

Подробнее это может быть:
1. Исходный код
2. Описание взаимодействия классов. Без абстрактных фич и прибабахов, а с конкретными именами и алгоритмами.

Добавлено через 49 секунд
perloid, причем тут интерфейсы, которые не могут содержать реализации?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 13.8.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(solenko @  13.8.2009,  13:49 Найти цитируемый пост)
Т.е. класс, который занимается ВСЕМ? 

нет, подключение конфигов, создание главной модели, подключение к БД, разбор урла (дальше передётся только массив), перенаправление на нужный тип модуля - всё происходит раньше.

Цитата(solenko @  13.8.2009,  13:49 Найти цитируемый пост)
Не авторизирован -- это тоже состояние пользователя и набор прав. В чем отличия сборки?

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


Цитата(solenko @  13.8.2009,  13:49 Найти цитируемый пост)
1. Исходный код
2. Описание взаимодействия классов. Без абстрактных фич и прибабахов, а с конкретными именами и алгоритмами.

а это уже невозможно, по причине полуразобранности системы. как раз в основном потому что не нравятся такие нюансы
PM MAIL WWW   Вверх
NewDima
Дата 13.8.2009, 14:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



solenko, код с php.net
Код

interface ElectricalDevice{
  public function power_on();
  public function power_off();
}

interface FrequencyTuner{
  public function get_frequencey();
  public function set_frequency($f);
}

class ElectricFan implements ElectricalDevice{
  // define ElectricalDevice...
}

class MicrowaveOven implements ElectricalDevice{
  // define ElectricalDevice...
}

class StereoReceiver implements ElectricalDevice, FrequencyTuner{
  // define ElectricalDevice...
  // define FrequencyTuner...
}


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

Это сообщение отредактировал(а) NewDima - 13.8.2009, 14:20
PM ICQ   Вверх
icewind
Дата 13.8.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Интерфейс не может содержать реализации. Являясь абстрактной сущьностью он просто описывает класс. В общем, один класс может быть определен множеством интерфейсов, но всю реализацию методов должен содержать сам.


--------------------
user posted image
PM MAIL Skype   Вверх
solenko
Дата 13.8.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



bars80080, я так и не получил ответа в чем принципиальная разница в сборке страницы

Цитата(bars80080 @  13.8.2009,  13:15 Найти цитируемый пост)
вода, песок и цемент используется в разных местах, но в одном месте отливаются статуи, в другом фундамент. я что должен пользоваться одной машиной для обоих целей?


Ок. Давайте поговорим аналогиями.
А теперь представляем что все это находится на территории какого-то предприятия... Вы водителя по машине допускать будете или таки по его документам? И в разные цеха он с разными правами доступа будет ходить не по машине. 

Цитата(bars80080 @  13.8.2009,  13:15 Найти цитируемый пост)
мне всего лишь нужно унаследовать бетономешалку и грузовики, два класса, которые поотдельности могут использоваться и в других предприятиях

Угу. Наследование должно получится приблизительно такое:
Автомобиль -> Грузовик -> Самосвал
Автомобиль -> Грузовик -> Бетономешалка

Вот только у Автомобиля УЖЕ есть водитель (ползователь). Для того, чтобы водить грузовик, водитель должен иметь определенную категорию (набор прав) А вот самосвал или бетономешалку он водит -- уже пофиг.

Цитата(bars80080 @  13.8.2009,  13:15 Найти цитируемый пост)
а это уже невозможно, по причине полуразобранности системы. как раз в основном потому что не нравятся такие нюансы

Ну тогда этот разговор так и останется о бетономешалках, пестиках и тычинках. Без конкретики это звучит так:
"У меня есть проблемма. Какая не скажу, но стандартные пути решения не подходят".



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 13.8.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(solenko @  13.8.2009,  15:42 Найти цитируемый пост)
я так и не получил ответа в чем принципиальная разница в сборке страницы

более конкретного не получишь


Цитата(solenko @  13.8.2009,  15:42 Найти цитируемый пост)
Вы водителя по машине допускать будете или таки по его документам?

есть два предприятия рядом: консервное и оборонное. без документов при попытке въехать на оборонное водителя пристрелят


Цитата(solenko @  13.8.2009,  15:42 Найти цитируемый пост)
Угу. Наследование должно получится приблизительно такое:
Автомобиль -> Грузовик -> Самосвал
Автомобиль -> Грузовик -> Бетономешалка

нет, я имел ввиду другое:

бетономешалка -> моёПредприятие
грузовик -> моёПредприятие

грузовик -> чужаяФерма
комбайн -> чужаяФерма



Цитата(solenko @  13.8.2009,  15:42 Найти цитируемый пост)
Ну тогда этот разговор так и останется о бетономешалках, пестиках и тычинках. Без конкретики это звучит так:
"У меня есть проблемма. Какая не скажу, но стандартные пути решения не подходят".

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

в аналогиях пока чётче получается
PM MAIL WWW   Вверх
NewDima
Дата 13.8.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Цитата(bars80080 @ 14.8.2009,  00:46)
бетономешалка -> моёПредприятие
грузовик -> моёПредприятие
грузовик -> чужаяФерма
комбайн -> чужаяФерма

вы считаете, что такое наследование имеет право на существование?
PM ICQ   Вверх
solenko
Дата 13.8.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(bars80080 @  13.8.2009,  16:46 Найти цитируемый пост)
более конкретного не получишь


Цитата(bars80080 @  13.8.2009,  16:46 Найти цитируемый пост)
однако, если есть решение или конкретное указание как тогда перестраивать ситему - хотел бы послушать

Учитывая первую цитату конкретнее чем "ну вот по-другому" не получиш )

Цитата(bars80080 @  13.8.2009,  16:46 Найти цитируемый пост)
есть два предприятия рядом: консервное и оборонное. без документов при попытке въехать на оборонное водителя пристрелят

Возвращаемся к программированию... 
Водитель без документов (неавторизированный пользователь) -- не попадет никуда (смотрит только страници с общим доступом)
Пользователь с обычым допуском (авторизированный пользователь) -- попадет на консервный завод (ну... личный кабинет, например)
Пользователь с полным допуском (админ) -- попадет на оборонку (backend)

Вот только машине (мега-класс-компонующий-страницу) пофиг имеет ли ее шофер документы. Все решеия принимаются предприятиями (конкретными модулями).


Цитата(bars80080 @  13.8.2009,  16:46 Найти цитируемый пост)
нет, я имел ввиду другое:
бетономешалка -> моёПредприятие
грузовик -> моёПредприятие

грузовик -> чужаяФерма
комбайн -> чужаяФерма


Да, это совсем другое. Это непонятно какие отношения между несвязанными объектами.



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 13.8.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NewDima @  13.8.2009,  18:09 Найти цитируемый пост)
вы считаете, что такое наследование имеет право на существование? 

в реальности как-то прокатывает

Цитата(solenko @  13.8.2009,  19:33 Найти цитируемый пост)
Учитывая первую цитату конкретнее чем "ну вот по-другому" не получиш )

у меня с мягким знаком


Цитата(solenko @  13.8.2009,  19:33 Найти цитируемый пост)
Вот только машине (мега-класс-компонующий-страницу) пофиг имеет ли ее шофер документы

да, и возникает резонный вопрос, зачем мне для перемещения между двумя городами на расстояние в 50 км космический корабль?

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


Цитата(solenko @  13.8.2009,  19:33 Найти цитируемый пост)
Это непонятно какие отношения между несвязанными объектами.

а что тут непонятного? по такой системе мы к примеру подключаем разные библиотеки include(), require().
подключаем только то что нам нужно в каждой конкретной ситуации.
PM MAIL WWW   Вверх
youri
Дата 14.8.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



Цитата(bars80080 @  13.8.2009,  09:30 Найти цитируемый пост)
ну хотя бы в том случае, когда у нас для решения задач используются разные классы. и в какой-то отдельной ситуации потребовалось использовать сразу несколько. в дальнейшем приходится передавать ссылку на объект и возникает проблема - приходится передавать ссылки на все объекты. вот и вопрос, почему бы не отнаследовать все нужные классы в один объект?

а что, будет код, который будет использовать поля/методы этого объекта, пришедшие из всех родителей? Т.е. речь идет о наследовании интерфейса, а не реализации?

Цитата(bars80080 @  13.8.2009,  10:48 Найти цитируемый пост)
вот и получается, что приходится делать не универсальные решения, где приходится либо создавать объект из свойства класса:$this->db = new DB();но этот вариант не удобен тем, что зачем запускать ещё раз соединение с БД, если оно уже есть в другом объекте?либо передавать объект с помощью global, что попахивает частным не гибким решением

мне тоже непонятно, зачем запускать еще одно соединение с БД. Можно сделать глобальную точку доступа к объекту БД, можно вообще БД статическим классом сделать. Возможно, имеет смысл почитать Управление зависимостями в PHP-коде

множественное наследование, насколько я знаю, используется для наследования реализации, а не интерфейса. Т.е. у нас есть некоторый класс (F), и мы хотим воспользоваться его функциональностью в классе (A), принадлежащем некоторой иерархии, а делать доступным извне добавленный класс (F) вовсе не нужно. Scott Meyers в Effective C++ (Item 40: Use multiple inheritance judiciously) приводит пример, когда множественное наследование имеет смысл (тоже несколько абстрактный, мог бы привести по-крайней мере пару конкретных примеров, когда он с этим сталкивался). Проблема, описанная мной выше, решается довольно просто - композиция. Так как не нужно менять интерфейс класса A, то мы просто создаем поле в этом классе, в которое помещаем объект класса F и пользуемся этим объектом. Но есть некоторые частные случаи, специфичные для C++. Если мы хотим немного подправить класс F перед использованием, а сделать это можно с помощью наследования (переопределить виртуальные функции), то в этом случае может пригодиться множественное наследование, но мы унаследуемся от класса F так, что никто, кроме класса A этого не заметит (т.е. никто не получит доступа к полям/методам класса F как части класса A). И вот я не могу похвастаться, что сталкивался с необходимостью в множественном наследовании или знаю конкретные случаи, когда оно имеет смысл

а по поводу твоей ситуации, bars80080, я понял следующее. Есть несколько классов, унаследованных от общего класса, которые генерируют страничку или часть ее. И вот в какой-то из этих классов нужно добавить некоторую функциональность из другого класса. Раз ты почему-то до сих пор не объяснил, о каких конкретных классах речь идет, давай строить догадки (потому что говорить абстрактно действительно нету смысла). Есть классы News и Menu, унаследованные от Element. News генерирует список новостей, Menu - меню соответственно. Надо добавить в News функциональность авторизации. Есть два варианта: 1) либо необходимо ее в интерфейс добавить и получим класс NewsAndAuthorization, 2) либо надо просто воспользоваться функциональностью класса Authorization, в результате получим класс EnhancedNews. Жду твоих комментариев ;)
PM   Вверх
nerezus
Дата 14.8.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

разработчики не учли этого момента.
 <sarcasm>Да, конечно, разработчики вообще тупые.</sarcasm>

Конкретно к "примеру выше" посоветую просто учить ООП.
Более конкретно: кроме is-a есть has-a.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
youri
Дата 14.8.2009, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



PM   Вверх
IZ@TOP
Дата 14.8.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Можно я тоже совет подкину?

Барс, почитай про шаблоны проектирования и MVC в частности.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
bars80080
Дата 14.8.2009, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(youri @  14.8.2009,  01:22 Найти цитируемый пост)
2) либо надо просто воспользоваться функциональностью класса Authorization, в результате получим класс EnhancedNews

ну да, и как отнаследовать в класс EnhancedNews функциональность класса Element и класса Authorization?
PM MAIL WWW   Вверх
IZ@TOP
Дата 14.8.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(bars80080 @  14.8.2009,  10:57 Найти цитируемый пост)
ну да, и как отнаследовать в класс EnhancedNews функциональность класса Element и класса Authorization? 

Не вижу необходимости наследовать блоку новостей авторизацию. Эта логика должна лежать поверх реализации компонента.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1308 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.