[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Видимость свойств класса
Nuzhser
Обьсните пожайлуста если в родительском классе конструктор создает масив обьектов то в дочернем классе эти обьекты могут использоваться или нет?
Вообще проблемы с пониманием видимости и доступности свойств классов внутри одной страницы.



Спустя 15 минут, 56 секунд (23.09.2011 - 19:44) Winston написал(а):
Чтобы понять видимость свойств класса нужно почитать про инкапсуляцию.




Спустя 1 минута, 27 секунд Winston написал(а):
Если в родителе свойства объявлены как public или protected то в дочернем классе можно получить доступ к ним, если private то - нет

Спустя 8 минут, 28 секунд (23.09.2011 - 19:53) Nuzhser написал(а):
Харашо. Если в родительском классе конструктор создает много обектов каждый из которых имеет одноименное свойство то к какому тогда обращается дочерний класс например через
$this->config->get('something'); если этот config в каждом обьекте свой и все обьекты в одном родительском классе.

Спустя 48 минут, 48 секунд (23.09.2011 - 20:42) twin написал(а):
Цитата
Если в родительском классе конструктор создает много обектов
нужно пересмотреть архитектуру.

Спустя 1 день, 17 часов, 49 минут, 48 секунд (25.09.2011 - 14:32) Nuzhser написал(а):
Ок. Какими методами лучьше изучать архитектуру?

Спустя 10 минут, 54 секунды (25.09.2011 - 14:42) vital написал(а):

Спустя 17 часов, 34 минуты, 45 секунд (26.09.2011 - 08:17) linker написал(а):
Дочерний класс наследует только методы и поля родительского класса и никогда их значения созданные в родителе уже после запуска скрипта. Это надо запомнить раз и на всегда.

Спустя 1 день, 2 часа, 39 минут, 33 секунды (27.09.2011 - 10:57) Nuzhser написал(а):
thank you linker

Ну а как тогда на счет доступа до обьектов созданных другими обьектами во время запуска скрипта.

Спустя 24 минуты, 31 секунда (27.09.2011 - 11:21) Игорь_Vasinsky написал(а):
Ты имеешь ввиду после инициализаии экземпляра объекта класса? А какой там доступ...

Спустя 1 час, 38 минут, 45 секунд (27.09.2011 - 13:00) linker написал(а):
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.
class Parent
{
public $a = 0;
protected $b = 0;

public function __construct()
{
$this->a = 1;
$this->b = 2;
}
}


class Child extends Parent
{
public function __construct($parent)
{
echo $this->a; // Выведет 0, т.к. мы унаследовали свойство, а не значение
echo $parent->a;
echo $parent->b; // тут будет ошибка, ибо свойство b защищено от доступа извне
}
}


$p = new Parent();
$c = new Child($p);

Спустя 10 часов, 5 минут, 16 секунд (27.09.2011 - 23:05) Greg1978 написал(а):
Цитата (linker @ 27.09.2011 - 10:00)
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.

Не обязательно. То что Вы предлагаете, классическое наследование называется "прозрачным ящиком" (white-box reuse). Внутренне устройство родительских классов видимо дочерним.
Есть ему альтернатива между разными, на первый взгляд, объектами. Эта альтернатива - композиция объектов. В таком случае мы получаем более сложный функционал, но и более гибкий за счёт динамического поведения, путём объединения или композиции объектов. Это есть "чёрный ящик" (black-box reuse). Реализация таких объектов ("дочерних") соответственно скрыта от посторонних и даёт только интерфейсы для использования.
Да, добавлю, это то же считается наследованием через композицию.

class ChildFullAge
{
private $parent = null;
public function __construct($parent)
{
$this->parent = $parent;
}
}


class ChildMinor
{
private $parent = null;
public function __construct($parent)
{
$this->parent = $parent;
}
}


// Взависимости от возвраста реализуем "наследование" путём композиции (делегирования)
// Почему делегирования, в дочерний конструктор передаём ссылку на родителя

class Parent
{
private $child = null;

public function __construct($years)
{
if($years > 18)
$this->child = new ChildFullAge($this)

if($years < 18)
$this->child = new ChildMinor($this)
}
}


$p = new Parent(10);

Спустя 20 минут, 20 секунд (27.09.2011 - 23:26) caballero написал(а):
Цитата
Да, добавлю, это то же считается наследованием через композицию.


А можно спросить у того кто такое считает , что именно ОТНАСЛЕДОВАНО в этой конструкции?

Спустя 18 минут, 2 секунды (27.09.2011 - 23:44) Greg1978 написал(а):
Цитата (caballero @ 27.09.2011 - 20:26)
Цитата
Да, добавлю, это то же считается наследованием через композицию.


А можно спросить у того кто такое считает , что именно ОТНАСЛЕДОВАНО в этой конструкции?

Двухсторонняя "жёсткая" связь (как и в случае реализации наследования на уровне интерпритатора) между объектами (дочерний объект может использовать родительские интерфейсы). В этом случае класс Parent делегирует
(отдаёт право на реализацию) дочернему классу.
А вообще можете этот вопрос переадресовать сами: Э.Гамма, Р.Хелм, С.Макконнелл и другим специалистам в области проектирования в ОО.

Спустя 10 минут, 50 секунд (27.09.2011 - 23:54) SoMeOnE написал(а):
linker
У меня не выдает ошибку в твоем примере. В чем причина?
Выдает ошибку только в случае
private $b = 0;

Спустя 8 минут, 7 секунд (28.09.2011 - 00:03) caballero написал(а):
Цитата
Двухсторонняя "жёсткая" связь (как и в случае реализации наследования на уровне интерпритатора) между объектами (дочерний объект может использовать родительские интерфейсы). В этом случае класс Parent делегирует
(отдаёт право на реализацию) дочернему классу.
А вообще можете этот вопрос переадресовать сами: Э.Гамма, Р.Хелм, С.Макконнелл и другим специалистам в области проектирования в ОО.

Не нужно умняки с книжек копипастить. Покажи что именно ОТНАСЛЕДОВАНО в твоем коде.

Спустя 2 минуты, 32 секунды (28.09.2011 - 00:05) caballero написал(а):
Цитата
У меня не выдает ошибку в твоем примере. В чем причина?



в отсутствии ошибки в коде
на ошибки в коментариях компилятор слава Б-гу внимания не обращает

Спустя 7 часов, 46 минут, 15 секунд (28.09.2011 - 07:51) linker написал(а):
SoMeOnE
Потому что private поля и методы не наследуются.

Greg1978
Посмотри внимательно на мой пример. Тем более мы говорим о классическом наследовании. В твоём примере вообще нет никакого наследования, дочерний класс может называться дочерним, только если он явно унаследован от другого класса, т.е. получил по родству поля и методы класса родителя. И вообще я бы это назвал не композицией, а композиционным проксированием.

Спустя 1 час, 1 минута, 58 секунд (28.09.2011 - 08:53) Guest написал(а):
Ещё раз возвращаю Вас к вашему посту про родство объектов.
Оно есть как на проектном уровне так и на уровне объектов, и этому ничего не помешает, ни "блаж" caballero, ни взрыв на Фукусиме.
По поводу композиции, проксирование или не проксирование это не важно, важно что в дальнейшем родитель передаёт право на реализацию (делегирует права) дочерним объектам, то же самое происходит в классическом наследовании (передаётся право на реализацию только в статическом формате ну и ясное дело право на пользование родительскими методами), подчёркиваю на уровне Zend машины.
C ув. Greg1978

Спустя 1 минута, 37 секунд (28.09.2011 - 08:55) Guest написал(а):
Да и не проксирование использовано а делегирование.
Прокси паттерн это другое.

Спустя 41 минута, 14 секунд (28.09.2011 - 09:36) linker написал(а):
Ну чтоб ты въехал наконец
class Parent
{
public $a = 'Parent';

public function show()
{
echo $this->a;
}
}


class Child extends Parent
{
}


$child = new Child();
$child->a = 'Child';
$child->show();
Быстро, просто и делает свою задачу - классическое наследование. То, что хочет ТС, описано в моём посте выше, где конструктору дочернего класса передаётся объект родителя.

Ёпт, откройте хотябы википедию и почитайте, что такое наследование, делегация с наследованием не имеют ничего общего.

Спустя 2 часа, 9 минут, 23 секунды (28.09.2011 - 11:46) Guest написал(а):
Ещё раз прочитайте по буквам!
Цитата
linker
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.

Где здесь НАСЛЕДОВАНИЕ?
Я и говорю что родство может создаваться и на основе композиций объектов на уровне проектирования архитектуры и они не являются чужими, так как композиция связывает жёстко дочерние объекты (при удалении родителя исчезают дочерние объекты). В этом случае (в случае композиции) имитируется наследование но с более гибкими функциями в отличии от классического - статичного на основе КЛАССОВ , не объектов и так же называется альтернативой наследованию, что само по себе подразумевает его замешение. Не ужели нельзя внимательно читать.

Спустя 3 минуты, 22 секунды (28.09.2011 - 11:49) linker написал(а):
Родство, это когда потомок через $this непосредственно обращается к полям или методам родителя (унаследованным, т.е. уже своим). Пример я не зря привёл, всё остальное не является наследование, а является проксированием. В твоём случае, "потомок" НИКОГДА не получит прямой/непосредственный доступ к protected полям и методам "родителя".

Спустя 38 минут, 17 секунд (28.09.2011 - 12:27) Guest написал(а):
Цитата (linker @ 28.09.2011 - 08:49)
Родство, это когда потомок через $this В твоём случае, "потомок" НИКОГДА не получит прямой/непосредственный доступ к protected полям и методам "родителя".

class Parent
class
Parrent
{
private $child = null;

protected $property = 'parent';

public function __construct()
{
$this->child = new Child($this);
}

public function getChild()
{
return $this->child;
}

public function getProperty()
{
return $this->property;
}
}


class Child
{
private $parent = null;

public function __construct(Parrent $parent)
{
$this->parent = $parent;
}

public function showPropertyParent()
{
echo $this->parent->getProperty();
}
}


$object = new Parrent();
$object->getChild()->showPropertyParent();

Спустя 8 минут, 55 секунд (28.09.2011 - 12:36) Guest написал(а):
И ещё "прозрачней"
class Parrent
{
private $child = null;

protected $property = 'parent';

public function __construct()
{
$this->child = new Child($this);
}

public function getChild()
{
return $this->child;
}

public function getProperty()
{
return $this->property;
}
}


class Child
{
private $parent = null;

public function __construct(Parrent $parent)
{
$this->parent = $parent;
}

static function getChild()
{
$parent = new Parrent();
return $parent->getChild();
}

public function showPropertyParent()
{
echo $this->parent->getProperty();
}
}


$child = Child::getChild();
$child->showPropertyParent();

Спустя 33 минуты, 56 секунд (28.09.2011 - 13:10) linker написал(а):
Именно, приходится реализовывать кучу левых методов. Чтобы получить protected методы и поля "родителя"/"потомка" придётся добавить ещё кучу методов, либо ходить через __set(), __get(), __call(). Прозрачность нулевая, во время разработки хрен построишь схему классов. Я не против таких подходов, я против называть сие чудо наследованием и уж тем более классическим в своём поведении. Повторюсь, что сие чудо называется проксированием.

Спустя 2 часа, 30 минут, 28 секунд (28.09.2011 - 15:41) bodja написал(а):
Цитата
И ещё "прозрачней"

Прозрачней? blink.gif
Да у меня чуть крышу не сорвало.

Что мы имеем?
запускаем метод Child::getChild() ,который создает обьект new Parrent(),котый тем самым
запускает конструктор того же класса.Конструктор класса Parrent создает обект new Child($this) передает свой указатель и запускает конструктор в классе Child.

Для чего все это?Получить указатель?Наследование?


вот такое тоже будет работать
private $property = 'parent';
а вот такое работать не будет
$child->test();
если добавить метод test в класс Parrent,надо опять извращаться.
а если добавить test() в класс Child,то будет работать
и так
$child->test();
и так
$child->getChild()->test();
короче х.з. что это такое но ,с этого всего такое наследование,как с меня испанский летчик.

Спустя 2 минуты, 51 секунда (28.09.2011 - 15:43) Winston написал(а):
Цитата (bodja @ 28.09.2011 - 15:41)
как с меня испанский летчик.

А почему именно испанский ? biggrin.gif

Спустя 3 минуты, 42 секунды (28.09.2011 - 15:47) bodja написал(а):
Потому,что испанского точно незнаю,и знать скорее всего небуду biggrin.gif biggrin.gif biggrin.gif

Спустя 1 час, 37 минут, 47 секунд (28.09.2011 - 17:25) Guest написал(а):
Цитата (linker @ 28.09.2011 - 10:10)
Именно, приходится реализовывать кучу левых методов. Чтобы получить protected методы и поля "родителя"/"потомка" придётся добавить ещё кучу методов, либо ходить через __set(), __get(), __call(). Прозрачность нулевая, во время разработки хрен построишь схему классов. Я не против таких подходов, я против называть сие чудо наследованием и уж тем более классическим в своём поведении. Повторюсь, что сие чудо называется проксированием.

Наконец то мы перешли из плоскости
Цитата
В твоём случае, "потомок" НИКОГДА не получит прямой/непосредственный доступ к protected полям и методам "родителя".

в плоскость можно но сложно и не нужно чего я и добивался.
Ясное дело что это костыли, которые никогда не применяться, но этим примером я и показываю что, ещё раз по буквам, в проектном уровне вот это неправильно и цитата выше с утверждениями НИКОГДА и Родство существует только между классами, но не объектами
Цитата
linker
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.

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

Спустя 1 минута, 46 секунд (28.09.2011 - 17:27) Guest написал(а):
В проксировании опрерируются как минимум три объекта, при чём третий объект не подчинённый а оперируемый!

Спустя 18 минут, 5 секунд (28.09.2011 - 17:45) Greg1978 написал(а):
Кстати эту цитату
Цитата
linker
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.

опровергает паттерн bridge.
Когда абстракция и реализация разделены, они могут изменяться независимо. Другими словами, при реализации через паттерн мост, изменение структуры интерфейса не мешает изменению структуры реализации.
class Animal
{
private $cat;
public function __construct()
{
$cat = new Cat($this);
}
}


class Cat
{
private $animal;
public function __construct(Animal $animal)
{
$this->animal = $animal;
}
}


Если уже и здесь найдёте проксирование, ну тогда извиняйте :)
И я думаю не стоит уже эту тему развивать, так как родство между объектами вне наследования не только есть, но и весьма полезно, так как соблюдает один из постулатов ООП - инкапсуляцию. При чём лучше чем само наследование в его классическом варианте и по этому носит название "чёрный ящик".

Спустя 10 минут, 30 секунд (28.09.2011 - 17:55) caballero написал(а):
Цитата
Проксирование - это когда объект, который контролирует доступ к другому объекту через перехват всех вызовов от передающего запросы.


Именно это и делает в твоем примере Child перехватывая вызовы и передавая их Parent


Спустя 7 минут, 29 секунд (28.09.2011 - 18:03) Winston написал(а):
Монстры ООП biggrin.gif
Свернутый текст
В хорошем смысле smile.gif

Спустя 2 минуты, 20 секунд (28.09.2011 - 18:05) Greg1978 написал(а):
Цитата (caballero @ 28.09.2011 - 14:55)
Цитата
Проксирование - это когда объект, который контролирует доступ к другому объекту через перехват всех вызовов от передающего запросы.


Именно это и делает в твоем примере Child перехватывая вызовы и передавая их Parent

Проксирование подразумевает "объект между" двумя объектами, но если child использует интерфейсы Parent (это кстати хорошо видно при статичном методе инициализации), а Parent в свою очередь только предоставляет функционал. Ещё раз где проксирование? Где сторонний объект, который получает результат от класса Parent даже через Child? Где получатель?
Мы, в этом случае, будем похожи на американскую администрацию с её поисками террористов. rolleyes.gif

Спустя 7 минут, 37 секунд (28.09.2011 - 18:13) caballero написал(а):
Цитата
Где сторонний объект, который получает результат от класса Parent даже через Child? Где получатель?


Что значит где? Тот кто обращается к этим классам тот и есть получатель, то есть клиент. То что ты его не изобразил сути дела не меняет

Спустя 1 час, 12 минут, 41 секунда (28.09.2011 - 19:25) Guest написал(а):
Цитата (caballero @ 28.09.2011 - 15:13)
Цитата
Где сторонний объект, который получает результат от класса Parent даже через Child? Где получатель?


Что значит где? Тот кто обращается к этим классам тот и есть получатель, то есть клиент. То что ты его не изобразил сути дела не меняет

В корне меняет, так можно добраться и до того что Адаптер и Прокси одно и то же.

Спустя 29 минут, 12 секунд (28.09.2011 - 19:55) caballero написал(а):
Цитата
В корне меняет, так можно добраться и до того что Адаптер и Прокси одно и то же.


По сути так оно и есть
половина паттернов имеют совершенно надуманые отличия - теоретикам от программирования надо было написать потолще книги для собственного
ЧСВ

В частности прокси - частный случай адаптера

Если вместо удивительно неудобной для воcприятия нотации UML попробовать написать реально работающий код получим то же самое с точки зрения бизнес-логики.








Спустя 14 минут, 57 секунд (28.09.2011 - 20:09) Guest написал(а):
Цитата
Если вместо удивительно неудобной для воcприятия нотации UML попробовать написать реально работающий код получим то же самое с точки зрения бизнес-логики.

Жесть.
Во - первых не стоит распространять мнение о не восприятии UML диграмм. Если Вам это тяжело даётся не стоит обобщать. (кстати в этот момент и составляю диаграмму классов архитектуры GUI smile.gif )
Во - вторых, жесть, предложение не смог понять. при чём тут связка UML - код - бизнес логика. Можно написать реально работающий код и без наследования, только при чём тут этот опус к теме.



Спустя 3 минуты, 29 секунд Guest написал(а):
Цитата
caballero
По сути так оно и есть
половина паттернов имеют совершенно надуманые отличия - теоретикам от программирования надо было написать потолще книги для собственного
ЧСВ

Я вот чего не пойму. Вы с таким стажем работы в IT конторах, такую ерунду говорите. Не подскажите в каких конторах Вы работали или Ваши проекты.

Спустя 3 часа, 19 минут, 14 секунд (28.09.2011 - 23:29) caballero написал(а):
Цитата
Во - первых не стоит распространять мнение о не восприятии UML диграмм. Если Вам это тяжело даётся не стоит обобщать. (кстати в этот момент и составляю диаграмму классов архитектуры GUI  )


Мода на UML уже давно прошла. Лет 8-10 назад наблюдал неоднократные попытки спроектировать архитектуру на UML. Начиналось с того что вот мы возмем Rational Rose понарисуем кубиков истрелок сгенерим код и получим архитектуру уже с готовыми исходниками.
Заканчивалось тем что в документацию попадали в лучшем случае рисунки отдельных связок некоторых классов и то после того как кодер приводил код к реально работающему виду а UML генерили реверс инжинирингом. Так и не довелось ни в своей ни в какой либо другой IT конторе ни во время работы с забугорными заказчиками (а там документацию пограмотнее нашего пишут) увидеть проект спроетированный на UML..
Может поделитесь ссылкой хоть на один фреймворк или CMS на сайте которого можно увидеть полностью его архитектуру во всей UMLой красе?
На паттерны пока мода не прошла поэтому новички спрашивают не как мне решить данную задачу и получить результат а как мне понять этот паттерн (в частности исключительно дебильный в вебовской реализации MVC) и впихнуть в мой код.
Аналогичная ситуация с аяксом: Как сделать это на аяксе? А нафига тут вообще аякс? Ну ты и дрёма, не понимаешь зачем аякс?

Цитата
Я вот чего не пойму. Вы с таким стажем работы в IT конторах, такую ерунду говорите. Не подскажите в каких конторах Вы работали или Ваши проекты.

В солидных конторах, начиная с почтового ящика 67. И это не ерунда а практический опыт. Наcмотрелся в свое время на кандидатов наук (весьма неглупых мужиков) пытающиеся в каждый IT проект впарить свои теоретические изыски, замечательно и весьма обосновано выглядевшие на бумаге и в дисерах, но не имеющие сколь либо реального применения в современной практической разработке.

Спустя 1 час, 7 минут, 3 секунды (29.09.2011 - 00:36) Greg1978 написал(а):
Мда ...
UML не для того создан что бы по нему генерировать исходники (хотя это практикуется и я сам это не поддерживаю). Создан для лучше восприятия и понимания, а то что в Ваших конторах не могли подобрать нормальную методологию ведения проектов эти проблемы не стоит сваливать на UML.
Я знаю что сейчас мода на agile методики идёт особенно scrum, в них ясное дело нет место формализации и начальному этапу аналитики (конструирование архитектуры то же не заложено фактически в методологию), соответственно проекты хромают на весь правый и левый глаза. Новый человек приходя в команду начинает всех программистов и по всякому "иметь" вместо того что бы "иметь" документацию начиная с UML. На форуме русскоязычном YII есть диаграмма классов всего фрейма.
На паттерны мода и не пройдёт, потому что это не мода в принципе, а структуры и опыт построения систем в зависимости от большинства ряда однотипных задач. При этом они обеспечивают оптимальные условия для повторного и независимого использования функционала, это раз.
Два, это их "документированность". Говоря что в этой части системы использован паттерн построения мост или адаптер новый человек в команде больше понимает реализацию при этом не надо на пальцах объяснять что куда и к чему если сделан какой то свой "велосипед". Соответственно и сам программист должен хоть как то знать о паттерне. Хотя что далеко ходить. В функциональном программировании так же есть свои шаблон построения, которые себя зарекомендовали лучшим образом в ряде однотипных или родственных задач. А вот то что Ваши архитекторы не смогли применить правильно опыт структурирования архитектуры с использованием паттернов то это уже опять - не стоит валить с больной головы на здоровую. smile.gif
И да, последнее, проектирование равно как и разработка ПО весч далеко не статическая и изменяться может довольно часто, особенно если нет этапа анализа и выработки требований, соответственно и архитектура даже может валиться наглухо от этого. понятное дело что и UML переделывается в зависимости от динамики изменений архитектуры и т.д. А как Вы хотели поддержка документации то же затратная часть разработки ПО, но она необходимо, чего не учитывают многие и многие. Практика специалистов по ведению проектов показывает, валяться проекты не от опыта и лени программистов, от недостатка и качества выработки требований и анализа. В этом помогает очень качественно диаграммы и документация. Я сказал диаграммы имея ввиду не только стандарт UML но BPMN и другие. Просто UML более поддерживаем и более применим в массах, да и инструменты под него хорошие. Это как Microsoft против Apple.

Спустя 18 минут, 50 секунд (29.09.2011 - 00:55) Greg1978 написал(а):
У меня, кстати, предложение к администрации форума появилось.
Создать тему форума по различным методологиям их использования, недостатки. Кто как ведёт проекты и справляется с разными этапами в разработке. Какие шаблоны документации используются, и в какой формализованности. Вопросов много можно порешать особенно если много у людей опыта в ведении проектов и балансировки между различными этапами разработки. smile.gif

Спустя 17 минут, 8 секунд (29.09.2011 - 01:12) Winston написал(а):
Цитата (Greg1978 @ 29.09.2011 - 00:55)
У меня, кстати, предложение к администрации форума появилось.
Создать тему форума по различным методологиям их использования, недостатки.

Так вы сами можете создать такую тему и развивать smile.gif

Спустя 8 минут, 45 секунд (29.09.2011 - 01:20) Greg1978 написал(а):
Ой обшибся smile.gif не тему, раздел Аналитики и методологий.

Спустя 22 минуты, 41 секунда (29.09.2011 - 01:43) bodja написал(а):
Цитата
Кстати эту цитатуЦ
Цитата
итата
linker
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.



опровергает паттерн bridge.
Когда абстракция и реализация разделены, они могут изменяться независимо. Другими словами, при реализации через паттерн мост, изменение структуры интерфейса не мешает изменению структуры реализации.


Здесь я полностью согласен с linker,а разработчикам паттерн bridge передайте от меня респект
за редкостно извратный способ реализации типо моста tongue.gif ,
хороший способ поседеть при отладке кода biggrin.gif

следующий код приоткроет тайны мироздания обьектов wink.gif


результат

Цитата
test1
test2
ok!
2
3
2
2
6


Greg1978
Весь код который вы приводили - это попытка получить указатель на новый обьект в типа наследуемом обьекте,
а потом ее подсовывать в других методах, private $animal самим обьектом не является,соответственно и наследования кода там никакого нет,
дальнейшая реализация -это просто подстановка другого указателя на обьект.
Короче ,всю эту кухню с конструкторами можно свести к
Цитата
$obj2->label=$obj1;


Цитата
И я думаю не стоит уже эту тему развивать, так как родство между объектами вне наследования не только есть, но и весьма полезно, так как соблюдает один из постулатов ООП - инкапсуляцию

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

Спустя 6 часов, 12 минут, 38 секунд (29.09.2011 - 07:56) linker написал(а):
Greg1978
Прокси, то когда я через один объект обращаюсь к другому. И не важно есть там третий объект или я делаю это напрямую обращаясь к прокси.

Родство - есть производная от наследования. Ещё раз прошу прочитать что такое наследование. Объекты ничего не наследуют, наследуют классы, объекты лишь получают поля и методы своего класса НИ БОЛЬШЕ И НЕ МЕНЬШЕ. Теперь я вижу насколько могут быть вредными паттерны, народ забывает суть.

Спустя 39 минут, 48 секунд (29.09.2011 - 08:36) Nuzhser написал(а):
Просто разбираясь в коде одного движка у меня возник такой галюн что класс прописан с использованием массива созданного другим классом никак не родственного. Может такое быть или это мираж?

Спустя 9 часов, 51 минута, 35 секунд (29.09.2011 - 18:27) Guest написал(а):
Цитата (linker @ 29.09.2011 - 04:56)
Родство - есть производная от наследования. Ещё раз прошу прочитать что такое наследование. Объекты ничего не наследуют, наследуют классы, объекты лишь получают поля и методы своего класса НИ БОЛЬШЕ И НЕ МЕНЬШЕ. Теперь я вижу насколько могут быть вредными паттерны, народ забывает суть.

Вам здесь звонил троюродный класс и просил передать что он становиться объектом троюродным братом и больше Вы с ним не родственники. И вообще пока Вы класс Linker от прадедушки, Вы не родственник ни кому.

Спустя 53 секунды (29.09.2011 - 18:28) Winston написал(а):
laugh.gif

Спустя 28 минут, 5 секунд (29.09.2011 - 18:56) Greg1978 написал(а):
biggrin.gif От себя добавлю, что объект Папа никогда не назовёт свой Объект Дочку родственным. Конечно это всё смешно,если бы не было так плохо.
linker расшифруем анаграмму ООП = объектное ориентированное программирование. Вывод в классы это результат человеческой деятельности ума. Естественный путь проектирования предметной области это выделение ОБЪЕКТОВ в семейные (РОДСТВЕННЫЕ) качества, свойства и поведения!
Вся и фишка в том что узкомысление в проектных реализациях, то есть как оно реализовано непосредственно в инструменте (интерпретатор PHP (кстати его называют недоООП, как после этого можно говорить про наследование как про родственное)), затупляет моск в функционально - объектно - непонятно - процедурное программирование. У кого более разумно у кого менее разумно и более чем упаковка статических процедур в классы и после этого кричать что ООП это хрень и ни на что не годный продукт воспалённого человеческо - программистского моска.
Это так для развития
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%D0%B8%D0%B9%29

http://dic.academic.ru/dic.nsf/enc_philosophy/4681/ПОДОБИЕ

Да, что бы не было что я говорил про наследование и всё такое (хотя это всё инструмент реализации передачи свойств и поведения либо автоматизированным (интерпретатор) либо ручным способами) привожу из за чего весь сыр бор.
Цитата
linker
Родство существует только между классами, но не объектами. Два объекта пускай и родственных классов, друг для друга являются чужими.

Спустя 13 часов, 17 минут, 3 секунды (30.09.2011 - 08:13) linker написал(а):
Цитата (Guest @ 29.09.2011 - 18:27)
Вам здесь звонил троюродный класс и просил передать что он становиться объектом троюродным братом и больше Вы с ним не родственники. И вообще пока Вы класс Linker от прадедушки, Вы не родственник ни кому.

Что за анонист тут вещает?

Greg1978
smile.gif Объект сам по себе не имеет ни полей, ни методов. Поля и методы дают ему классы. Классы наследуются друг от друга, классы являются абстрактными, классы являются финальными, интерфейсы тоже своего рода абстрактные классы, классы могут быть родительскими, классы могут быть дочерними и т.д. Видишь, всё классы и ни одного объекта. Ибо объект - это продукт вторичный. Самая большая ошибка ООПшников и паттернистов новоявленного пошиба - это путаница между классами и объектами, когда одно понятие подменяют другим. А всё от того, что слишком рано ринулись за крутизной, умными книжками про паттерны и большими бабками.
Цитата
Естественный путь проектирования предметной области это выделение ОБЪЕКТОВ в семейные (РОДСТВЕННЫЕ) качества, свойства и поведения!

Ты хоть сам понял что сказал ? smile.gif Про полиморфизм слышал? И ещё, в ООП PHP нет понятия свойство, есть только понятие поле класса. А ты знаешь чем различаются эти два понятия?

Не вижу ничего плохого в паттернах, пока они облегчают задачу, но когда количество и сложность кода превышает банальный и всем известный class A{}, class B extends A{}, то нахрен не нужен такой паттерн в решении задачи.

Собственно мы отклонились от того с чего начали. А именно от того, что ты назвал свою композицию наследованием, да ещё и в классическом поведении, хотя это абсолютно неправда. И я говорил, что два объекта не наследуются друг от друга и не могут получить доступ к к чужим protected полям. И что в двух, не связанных наследственной связью, классах нельзя применять $this и self и parent в отношении одного к другому. И что в случае с вопросом ТС лучше использовать классическую схему наследования, с передачей объекта родительского класса, в конструктор дочернего класса.

Спустя 2 часа, 27 минут, 31 секунда (30.09.2011 - 10:41) twin написал(а):
Мнда...
В который раз удивляюсь мудрости Хьюза, который сказал, что ООП в веб сводится к тому, что вместо прямого решения задачи мы сначала придумываем кучу новых и только потом решаем основную.

В большинстве случаев все в тысячу раз проще, если не зарываться в паттерны, а решать именно ту задачу, которая стоит перед нами. Вот фраза, которя отражает суть подобного рода полемик:
Цитата
Ты хоть сам понял что сказал ?
Вы с этими извратами не только друг друга не понимаете, но и даже себя.

Спустя 8 минут, 4 секунды (30.09.2011 - 10:49) linker написал(а):
twin
Хьюз справедлив для решения задачи с неизменными условиями на всём протяжении своей жизни. Для всего остального - решение в лоб наихудшее из зол.

Ну чтобы судить понимаем мы друг друга или себя, нужно хотя бы разбираться в вопросе, который тут обсуждается. Ты Гуру (честно), но без ООП поэтому уж извини, без обид.

Спустя 11 минут, 37 секунд (30.09.2011 - 11:00) caballero написал(а):
Цитата
В большинстве случаев все в тысячу раз проще, если не зарываться в паттерны, а решать именно ту задчу, которая стоит перед нами.


А как же понты перед джуниорами и надувание щек перед заказчиком?

Ни самом деле, 9 из 10 применяемых (по уму) паттернов в PHP (и не только) - это синглетон. Помню что применял такую конструкцию для соединения с БД в яве еще до того как узнал что оказывается это паттерн.

Спустя 22 часа, 56 минут, 43 секунды (1.10.2011 - 09:57) Nuzhser написал(а):
Правильно ли я мыслю?
1. Обьекты не бывают что называется расшаренными они не дают доступа напрямую к своим переменным.
2. Если в конструкторе обьекта создается масив из других обьектов то доступ к ним будет происходить только с помощью обьекта-контейнера типа $pregnant->child->voice
3.Внутренний обьект $child не имеет доступа к переменным обьекта-контейнера $pregnant напрямую а только через конструкцию $pregnant->milk

Спустя 6 часов, 47 минут, 58 секунд (1.10.2011 - 16:45) caballero написал(а):
Цитата
Обьекты не бывают что называется расшаренными они не дают доступа напрямую к своим переменным.

почему это? Объяви как public и все дела


Спустя 1 час, 5 минут, 3 секунды (1.10.2011 - 17:50) twin написал(а):
Цитата (linker @ 30.09.2011 - 07:49)
twin
Хьюз справедлив для решения задачи с неизменными условиями на всём протяжении своей жизни. Для всего остального - решение в лоб наихудшее из зол.


Как сказать...
Если бы ты был прав, количество паттернов исчислялось бы десятками. На деле мы видим их тысячи. И они уже не являются паттернами, это частные реализации. Кто во что горазд.

Лично мне этот подход нравится, я предпочитаю столкнувшись с задачей, решить её самостоятельно и использовать потом свои наработки, чем перелопачивать тонны макулатуры, где то же самое описывается разными разработчиками. НО это выдается за шаблоны, хотя это самая настоящая реализация шаблонов.

Да, это примеры. Все вроде хочется как лучше. Но благими намерениями...

Ведь что получается. Люди начинают учиться программировать, а им в неокрепшие головы вбивают план действий:

Синтаксис - мануал - гостевая_книга - ООП - паттерны проектирования. Галопом.

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

В итоге мы часто имеем такой откровенный говнокод, что диву даешься. На первый взгляд писал мастер, все по науке. Приглядишься - ужос.

Цитата
Ну чтобы судить понимаем мы друг друга или себя, нужно хотя бы разбираться в вопросе, который тут обсуждается. Ты Гуру (честно), но без ООП поэтому уж извини, без обид.


Я знаю ООП. И ничего в нем сложного нет. Совершенно.
Но писать нормальный ООП код я не готов. И больше того скажу, я не видел пока нормальных релизов на ООП. (фреймворки я не считаю, ибо они изначально уже вещь аномальная).

Именно потому, что написать нормальный код на инструменте для того не предназначенном могут только виртуозы плана Никколо Паганини. Который и на одной струне мог сыграть.

А у остальных жалкий скрип выходит и какафония. Но вид при этом минимум лауреатский.

Спустя 1 час, 11 минут, 24 секунды (1.10.2011 - 19:02) bodja написал(а):
Цитата
Правильно ли я мыслю?

2 и 3 п все верно,если я правильно понял то что вы написали,
Учитесь краткости у linker ??? biggrin.gif

twin

ООП- это всего лиш один из инструментов предоставляемых программисту,также как и многочисленные полезные функции в PHP.
Так же как и функции ,можно чо то использовать из ООП ,что то нет.
Тут главное увидеть выгоду для своего кода.
Нет нужды ломится в ООП в полный рост,кто это делает - это его проблемы.
Проблема ВЕБ программистов в том,что их исходники видны,поэтому каждый думает не сколько над функциональностью и оригинальностью своего кода,сколько за его красоту.
Это видят новички и их клинит в туже сторону.
Отсюда 2 десятка строк "офигенного" кода с нулевым КПД- но зато как красиво rolleyes.gif biggrin.gif

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

Спустя 1 день, 13 часов, 53 минуты, 51 секунда (3.10.2011 - 08:55) linker написал(а):
twin
Я не знаю тысячи паттернов, я знаю с десяток, ну может 20 и то, 15-16 из них являются вариациями оставшихся. Каждый для чего-то нужен. Каждый имеет свои плюсы и минусы. Делать самому - это лепить велосипед, но я не имею ничего против этого, даже наоборот.

Даже авторы умных книжках по паттернам (не только PHP): "Ребята, паттерны добро, только в необходимых количествах, когда вы всё подменяете паттернами и программируете только в паттернах и думаете паттернами - это зло. Нельзя ими увлекаться."

Спустя 2 часа, 54 минуты, 13 секунд (3.10.2011 - 11:50) neadekvat написал(а):
Свернутый текст
Цитата (twin @ 1.10.2011 - 18:50)
какафония

Может, и кака, но все-таки какофония smile.gif

Спустя 1 минута, 4 секунды (3.10.2011 - 11:51) twin написал(а):
Я не ошибся))


_____________
Лэт ит би
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.