powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос об объектах
15 сообщений из 15, страница 1 из 1
Вопрос об объектах
    #37545698
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представь объект дом. Есть у него как бы внутренние объекты которые не наследуют его. например провода, они ведь ни чего общего с домом не имеют. Но проводам нужна какая то информацию о доме, например где у него проложены кабель каналы. Что бы дать такую информацию проводам приходиться делать методы дающие эту информацию публичными. Проблема в том что объект человек который будет использовать объект дом видеть объект с кучей доступных ему публичных методов которые для него не предназначены, например та же инфра про кабель каналы. Это само собой плохо так как изначально планировалось, что у объекта дом будет гораздо меньше публичных методов и он будет, что-то вроде черного ящика, а не получается так как внутренним объектам нужна инфра и им не откуда ее получит кроме как через публичные методы дома. Что я делаю не так?
Внутренними объектами здесь я называю экземпляры классов хранящихся внутри базового класса, но ни как не связанные с ним через наследования. В моем примере это провода, которые являются частью дома, но с другой стороны, ни имеет, ни какого отношения к дому.
------------------------------------------------------------
Мои работы: " http://hotcharts.ru/%22%5D%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE]http://hotcharts.ru/"]Радио хит-парады - Европа плюс и т.п. и " http://allking.ru/%22%5D%D0%A1%D1%82%D0%B8%D0%B2%D0%B5%D0%BD]http://allking.ru/"]Стивен Кинг - книги фильмы и др
Ранее работал над " http://getsongs.ru/%22%5DGetSongs.ru]http://getsongs.ru/"]GetSongs.ru и " http://sking.org.ru/%22%5DSking.org.ru]http://sking.org.ru/"]Sking.org.ru
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37545750
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37545760
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Мне кажеться что нет, по крайней мере я надеюсь что нет, потому что как то не понятно. Мне казалось что должно быть стандартное простое решение так как мне кажется ситуация которую я описал типичная для ООП.
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37545797
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAkoМне казалось что должно быть стандартное простое решение
капот автомобиля пользователю следует открывать только для заливки стеклоомывательной жидкости
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37545912
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример для наглядности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
     class  Home
    {
         private  $wires;
        
         function  __construct()
        {
            $this->wires[] =  new  Wire($this,  5 );
            $this->wires[] =  new  Wire($this,  10 );
        }
        
         public   function  check_length($length)
        {
             return  ( ($length <=  7  ) ?  TRUE  :  FALSE  );
        }
    }
    
     class  Wire
    {
         function  __construct($home, $length)
        {
             if  ($home->check_length($length) ===  FALSE )
            {
                 echo (" слишком длинный провод для этого дома ");
            };
        }
    } 
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546051
ivan gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
 class  Home {

     private  $wireCollection;

     function  __construct() {
       
        $this->wireCollection =  new  WireCollection();
        
        $this->wireCollection->add( new  Wire( 5 ));
    }

}

 class  WireCollection {
    
     private  $wires;
    
     public   function  add($wire){
        
         if (!$this->checkLength($wire->length))
            throw  new  TooLongWireException();
        
        $this->wires[] = $wire;
    }
    
     private   function  checkLength($length){
         return  $length <=  10 ;
    }

     function  __construct() {
        
        $this->wires =  Array ();
    }

}

 class  Wire{
     public  $length;
}
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546066
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan gusev,
Спасибо но нет. Может быть я плохо объяснил и пример не самый удачный привел.
Ваше реализация не пойдет так как метод check_length ДОЛЖЕН принадлежать дому так как это его родной метод который он так же использует в своих нуждах. Тоесть кабель каналы это неотемлемая часть дома, в отличаии от проводов которые могу использовать и например в машине. check_length должен оставаться в доме как неотемлемая его часть.
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546146
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAko..Но проводам нужна какая то информацию о доме, например где у него проложены кабель каналы....




улыбнуло.
Афтор жги ышо!!!

а вашеа печень (страшно подумать) знает про кости левой ноги? а мысли ваши, она так же читает? Я молчу про прямую кишку....:)

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

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


удачи вам
(круглый)
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546206
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,

Извиняюсь, что морочу голову не удачными примерами.
Попробую еще раз.
У класса Дом есть метод Уборщицы, который возвращает экземпляр Уборщицы.
У уборщицы есть метод Убраться. При создании Уборщицы ей в конструктор передается экземпляр объекта дом для того что бы она знала где ей убираться. Вот Уборщице и приходиться дергать методы Дома для уборке. Соответственно жильцу не нужны те методы, что нужны Уборщице, как их скрыть от Жильца?
Вызов будет такой
Дом->Уборщицы(2)->Убраться();
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546217
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще замечание Уборщица в данном случае это специальный "внутренний" класс нужный только для реализации дома и ни для чего больше. Эти Уборщицы были созданы специально для него и вне его контекста использоваться не будут. Тоесть как что-то неотъемлемое от дома.
И кроме Уборщиц есть еще много подобных классов, которые выполняют свои функции по дому и так же являются его неотъемлемой частью.
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546243
ivan gusev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChAkokolobok0,

Извиняюсь, что морочу голову не удачными примерами.
Попробую еще раз.
У класса Дом есть метод Уборщицы, который возвращает экземпляр Уборщицы.
У уборщицы есть метод Убраться. При создании Уборщицы ей в конструктор передается экземпляр объекта дом для того что бы она знала где ей убираться. Вот Уборщице и приходиться дергать методы Дома для уборке. Соответственно жильцу не нужны те методы, что нужны Уборщице, как их скрыть от Жильца?
Вызов будет такой
Дом->Уборщицы(2)->Убраться();

Не знаю, как там у пхп с интерфейсами, а в .net это было-бы как-то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
class Home : IClean, ILive
    {
        private Tenant m_t;
        private Cleaner m_c;

        public Home()
        {
            this.m_t = new Tenant(this);

            this.m_c = new Cleaner(this);
        }

        public void Clean()
        {
            throw new NotImplementedException();
        }

        public void Sleep()
        {
            throw new NotImplementedException();
        }
    }


    class Tenant
    {
        public Tenant(ILive parent)
        {

        }
    }



    class Cleaner
    {
        public Cleaner(IClean parent){

        }
    }


    interface IClean
    {
        void Clean();
    }

    interface ILive
    {
        void Sleep();
    }
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546261
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivan gusev,

Спасибо так действительно можно, но уж больно много кода получается "лишнего", так как таких Уборщиков, как я писал там полно разных и для каждого делать интерфейс, какая то лишня работа получается.
На другом форуме мне насоветовали шаблон Proxy. Тоесть для получившегося у меня класса дом с кучей публичных методов сделать одну обертку в виде Proxy. Простой и рабочий вариант, но какой то не очень красивый. Ну да ладно хоть что-то.
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546433
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAko...создании Уборщицы ей в конструктор передается экземпляр объекта дом для того что бы она знала где ей убираться....


а теперь представляем женщину, которая ходит с планом дома :) Или по другому - она одномоментно(!) начинает вытирать пыль везде(!) в доме? тут как то не состыковка у вас в виденье предметной области. Наверное она в один момент времени может отработать некий меньший участок уборки. Хотя может дом игрушечный и она их протирает в витринах детского магазина? - тогда это другой случай конечно же :)

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


удачи вам
(круглый)
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546438
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChAko...Уборщице и приходиться дергать методы Дома для уборке...Дом->Уборщицы(2)->Убраться();

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


вам не прораммы, вам сценарии к фильмам ужасов писать надо - это ваш конёк!!! :)

или по другому...
кто инициатор действия? человк(тот кто уборщик)? Или пыль которая сейчас будет убираться?

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

удачи вам
(круглый)
ЗЫ
Лучше прочтите Буча - многие казусы отпадут сами собой...
...
Рейтинг: 0 / 0
Вопрос об объектах
    #37546522
ChAko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,

Спасибо вам что пытались понять мои проблемы и помочь. Я вижу что есть много непонимания, и скорее всего от того что я плохо объясняю привожу плохие примеры. Ну да ладно буду разбираться сам. Еще раз спасибо
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вопрос об объектах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]