Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.210.100] |
|
Страницы: (8) « Первая ... 6 7 [8] все ( Перейти к последнему сообщению ) |
Сообщ.
#106
,
|
|
|
Сообщ.
#107
,
|
|
|
яма = Бог.создать<Человек>().создать<Лопата>().создать<Яма>() |
Сообщ.
#108
,
|
|
|
Это контракты. DbC и все такое. У функций/методов есть предусловия - набор требований, которые должны быть обеспечены вызывающей стороной, и постусловия - набор условий, выполнение которых мы гарантируем по окончании вызова. Например. Вот есть у нас очередь и мы хотим запихнуть в нее элемент. Мы можем требовать, чтобы очередь не была заполненной (допустим, это имеет смысл), а со своей стороны можем гарантировать, что очередь будет не пуста. Вот как это выглядит в предложении к стандартизации для C++: int push(queue& q, int val) [[ expects: !q.full() ]] [[ ensures !q.empty() ]]{ ... } Для java точно есть решения. Соответственно, в случае наследования и перекрытия методов, мы можем только ослаблять предусловия и усиливать постусловия. Тогда код, использующий базовый класс, сможет всегда работать и с нашим классом. Есть еще инварианты, но про них, я думаю, ты слышал. |
Сообщ.
#109
,
|
|
|
Цитата applegame @ И как следует описать этот твой тезис яма = Яма.создать<Лопата>() В этом мире ямы не создаются сами по себе. Их создают люди. Или другие животные. Зачем при этом параметризовать яму лопатой совсем не понятно. Цитата applegame @ или яма = Лопата.создать<Яма>() type Яма = ... type КопательныйИнструмент = ... type Размеры = ... class Человек : object ... method копать_яму_с_помощью : КопательныйИнструмент -> Размеры -> Яма method копать_яму_конечностями : Размеры -> Яма end let applegame = new Человек ... in let лопата = new Лопата ... in большущая_яма = applegame#копать_яму_с_помощью лопата (Размеры ...) |
Сообщ.
#110
,
|
|
|
Цитата korvin @ В этом мире Согласно твоей модели мира |
Сообщ.
#111
,
|
|
|
Ты, походу, вообще не понял, объчём речь. Иначе зачем вместо развития интерфейсов реализовал их?
|
Сообщ.
#112
,
|
|
|
Цитата Qraizer @ Ты, походу, вообще не понял, объчём речь. |
Сообщ.
#113
,
|
|
|
Цитата D_KEY @ Согласно твоей модели мира Ну, не знаю, как у вас там на Альфа-Центавре, но у нас пока что лопаты не обладают автономностью и хоть каким-нибудь интеллектом, чтобы копать самостоятельно. Хотя, если речь о мире Микки Мауса, например, или какой-то компьютерной игре, то там, конечно всякое может быть, ямы и сами могут копать себя без всяких лопат. Just for fun 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) 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) |
Сообщ.
#114
,
|
|
|
Цитата korvin @ Ну, не знаю, как у вас там на Альфа-Центавре, но у нас пока что лопаты не обладают автономностью и хоть каким-нибудь интеллектом, чтобы копать самостоятельно. Ну я к тому, что "человек", "яма", "лопата" и даже твоя "автономность" и "интеллект" - это абстракции, т.е. часть модели мира, а не сам мир |
Сообщ.
#115
,
|
|
|
Цитата D_KEY @ Ну я к тому, что "человек", "яма", "лопата" и даже твоя "автономность" и "интеллект" - это абстракции, т.е. часть модели мира, а не сам мир Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму. |
Сообщ.
#116
,
|
|
|
Цитата korvin @ Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил. Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму. |
Сообщ.
#117
,
|
|
|
Цитата applegame @ Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил. Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того? |
Сообщ.
#118
,
|
|
|
Цитата Астарот @ Тогда проблемы ямы и лопаты не существует. И вообще никаких проблем не существует. Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того? |
Сообщ.
#119
,
|
|
|
Цитата applegame @ Тогда проблемы ямы и лопаты не существует. Конечно не существует. Что, однако, не мешает ломать над ней копья |
Сообщ.
#120
,
|
|
|
Цитата Астарот @ Что, однако, не мешает ломать над ней копья Лишь бы не лопаты |