На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (8) « Первая ... 6 7 [8]  все  ( Перейти к последнему сообщению )  
> Инкапсуляция vs Агрегирование , размышления в различных реализациях (языках программирования)
   
Что считаете лучшим?
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Цитата korvin @
    Цитата Астарот @
    Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой?

    В этом мире человек копает яму лопатой. =)

    Хм. И как следует описать этот твой тезис:
    ExpandedWrap disabled
      яма = Яма.создать<Лопата>()

    или
    ExpandedWrap disabled
      яма = Лопата.создать<Яма>()

    :lol:
    Сообщение отредактировано: applegame -
      ExpandedWrap disabled
        яма = Бог.создать<Человек>().создать<Лопата>().создать<Яма>()

      :ph34r:
      Сообщение отредактировано: Астарот -
        Цитата Астарот @
        Что за "пред" и "пост" условия такие? :scratch:

        Это контракты. DbC и все такое.

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

        Вот как это выглядит в предложении к стандартизации для C++:
        ExpandedWrap disabled
          int push(queue& q, int val)
            [[ expects: !q.full() ]]
            [[ ensures !q.empty() ]]{
            ...
          }

        Для java точно есть решения.

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

        Есть еще инварианты, но про них, я думаю, ты слышал.
          Цитата applegame @
          И как следует описать этот твой тезис
          ExpandedWrap disabled
            яма = Яма.создать<Лопата>()


          В этом мире ямы не создаются сами по себе. Их создают люди. Или другие животные. Зачем при этом параметризовать яму лопатой совсем не понятно.

          Цитата applegame @
          или
          ExpandedWrap disabled
            яма = Лопата.создать<Яма>()

          Оружие не убивает, убивают люди. Т.е. лопаты не создают ямы. См. выше.

          ExpandedWrap disabled
            type Яма = ...
            type КопательныйИнструмент = ...
            type Размеры = ...
             
            class Человек : object
              ...
              method копать_яму_с_помощью : КопательныйИнструмент -> Размеры -> Яма
              method копать_яму_конечностями : Размеры -> Яма
            end
             
            let applegame = new Человек ... in
            let лопата = new Лопата ... in
              большущая_яма = applegame#копать_яму_с_помощью лопата (Размеры ...)
            Цитата korvin @
            В этом мире

            Согласно твоей модели мира :)
              Цитата JoeUser @
              И как его зафэйлить? Приведи пример, плс.
              Ты, походу, вообще не понял, объчём речь. Иначе зачем вместо развития интерфейсов реализовал их?
                Цитата Qraizer @
                Ты, походу, вообще не понял, объчём речь.

                :(
                  Цитата D_KEY @
                  Согласно твоей модели мира

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

                  Just for fun

                  ExpandedWrap disabled
                    type location =
                        { lat : float
                        ; lon : float
                        }
                     
                    let location_to_string { lat ; lon } =
                        Printf.sprintf "(lat %.2f, lon %.2f)" lat lon
                     
                    type size =
                        { length : float
                        ; width : float
                        ; height : float
                        }
                     
                    let size_to_string { length ; width ; height } =
                        Printf.sprintf "(LxWxH = %.1fx%.1fx%.1f)" length width height
                     
                    type pit =
                        { size : size
                        ; location : location
                        }
                     
                    let pit_to_string { size ; location } =
                        Printf.sprintf "Pit of %s at %s" (size_to_string size) (location_to_string location)
                     
                    type capacity =
                        { volume : size
                        ; weight : float
                        }
                     
                    type dig_tool = < capacity : capacity >
                     
                    (* just a helper functions for more DSL'ish syntax *)
                    let at_ x = x
                    let of_ x = x
                    let with_ x = x
                     
                    class shovel volume_capacity weight_capacity = object
                        method capacity = { volume = volume_capacity ; weight = weight_capacity }
                    end
                     
                    class hand (cap : capacity) = object
                        method capacity = cap
                        method side_by_side (other_hand : hand) =
                            let l = min cap.volume.length (other_hand#capacity).volume.length in
                            let w = cap.volume.width +. (other_hand#capacity).volume.width in
                            let h = min cap.volume.height (other_hand#capacity).volume.height in
                            let wc = cap.weight +. (other_hand#capacity).weight in
                                object
                                    method capacity = { volume = { length = l ; width = w ; height = h } ; weight = wc }
                                end
                    end
                     
                    class human (left_hand : hand) (right_hand : hand) = object (self)
                        method private both_hands = left_hand#side_by_side (with_ right_hand)
                        method dig_a_pit_with dig_tool size location =
                            { size = size ; location = location }
                        method dig_a_pit size location =
                            self#dig_a_pit_with (self#both_hands) size location
                    end
                     
                    let a_small_shovel = new shovel { length = 20.0 ; width = 15.0 ; height = 3.0 } 1.5
                     
                    let a_strong_hand = new hand { volume = { length = 15.0 ; width = 10.0 ; height = 5.0 }
                                                 ; weight = 3.0
                                                 }
                     
                    let a_huge_size =
                        { length = 100.0
                        ; width = 200.0
                        ; height = 50.0
                        }
                     
                    let the_center_of_moscow = { lat = 1.23 ; lon = 45.6 }
                    let the_center_of_saint_petersburg = { lat = 12.3 ; lon = 4.56 }
                     
                    let _ =
                        let applegame = new human (with_ a_strong_hand) (with_ a_strong_hand) in
                        let a_great_pit_in_moscow = applegame#dig_a_pit_with a_small_shovel (of_ a_huge_size) (at_ the_center_of_moscow) in
                        let a_great_pit_in_saint_pete = applegame#dig_a_pit (of_ a_huge_size) (at_ the_center_of_saint_petersburg) in
                        Printf.printf "%s\n" (pit_to_string a_great_pit_in_moscow) ;
                        Printf.printf "%s\n" (pit_to_string a_great_pit_in_saint_pete)


                  ExpandedWrap disabled
                    Pit of (LxWxH = 100.0x200.0x50.0) at (lat 1.23, lon 45.60)
                    Pit of (LxWxH = 100.0x200.0x50.0) at (lat 12.30, lon 4.56)

                  Сообщение отредактировано: korvin -
                    Цитата korvin @
                    Ну, не знаю, как у вас там на Альфа-Центавре, но у нас пока что лопаты не обладают автономностью и хоть каким-нибудь интеллектом, чтобы копать самостоятельно.

                    Ну я к тому, что "человек", "яма", "лопата" и даже твоя "автономность" и "интеллект" - это абстракции, т.е. часть модели мира, а не сам мир :)
                      Цитата D_KEY @
                      Ну я к тому, что "человек", "яма", "лопата" и даже твоя "автономность" и "интеллект" - это абстракции, т.е. часть модели мира, а не сам мир

                      Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму.
                        Цитата korvin @
                        Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму.
                        Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил.
                          Цитата applegame @
                          Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил.

                          Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того? :rolleyes:
                            Цитата Астарот @
                            Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того?
                            Тогда проблемы ямы и лопаты не существует. :) И вообще никаких проблем не существует. :lol:
                            Сообщение отредактировано: applegame -
                              Цитата applegame @
                              Тогда проблемы ямы и лопаты не существует. :)

                              Конечно не существует. Что, однако, не мешает ломать над ней копья :D
                                Цитата Астарот @
                                Что, однако, не мешает ломать над ней копья

                                Лишь бы не лопаты
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0499 ]   [ 17 queries used ]   [ Generated: 19.03.24, 10:28 GMT ]