Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 50 51 [52] 53 54 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#767
,
|
|
|
|
Цитата --Ins-- @ компилятором. Кем? |
|
Сообщ.
#768
,
|
|
|
|
Цитата Повстанець @ компилятором. Как? |
|
Сообщ.
#769
,
|
|
|
|
Цитата --Ins-- @ Ошибкой при любой попытке изменить состояние своих полей, или состояние любого из предков. Как? |
|
Сообщ.
#770
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Как минимим, нужно или заствлять клиента явно удалять копии, или использовать обертки, которые не предоставляют удобного доступа к объекту. 1) кто удалит копию? если обертка, то какой интерфейс она предоставляет клиенту и что ему придется об этом знать? Пойдут ли на это программисты? 2) каким образом? 3) тогда потеряем возможность модифицировать его внутри TRect. 1) да хоть owner, Inc же писал способы, и CodeMonkey в соседней теме не раз упоминал InterfacedObject Какая-то обертка, которую нужно еще откуда-то взять и которая не предоставляет удобного унифицированного доступа к объекту? Цитата 2) ![]() ![]() property Left read Point.X; property Top read Point.Y; вместо возврата точки. заодно и обращение короче. В данном случае - согласен, а если X и Y - тоже объекты? Цитата 3) нет, ведь мы можем присвоить полю новый объект-точку вместо старой. Вот тут соглашусь. То есть единственный вариант - "иммутабельный" класс TPoint(кстати, в таком случае, объект-ссылка для клиента мало будет отличаться от объекта-значения ).Хочу заметить, что С++ не мешает поступить также. Цитата Цитата Повстанець @ Каждый язык, прямо или коственно поддерживает ООП. Вопрос только как именно поддерживает. С++ имеет некую объектную модель, позволяющую покрыть не всю, конечно, но бОльшую часть потребностей, возникающих при ООП проектировании на уровне объявления. Всё то же самое можно реализовать и в С, процедурами, указателями и модулями. Но на уровне реализации. В делфи тоже есть некая объектная система, но элементарная защита объекта реализуется почему то сишными способами. а const -- это ппц какой оопшный способ? а защита объекта делается в делфи обычным оопшным способом -- инкапсуляцией Не мне тебе рассказывать о том, что у ООП нет монополии на инкапсуляцию, а const - это отдельный механизм гарантий. |
|
Сообщ.
#771
,
|
|
|
|
Цитата Повстанець @ Ошибкой при любой попытке изменить состояние своих полей, или состояние любого из предков. 1. А метод объекта можно вызвать? 2. А в метод другого объекта ссылку на себя параметром передать можно? 3. А метод просто другого объекта вызвать можно? |
|
Сообщ.
#772
,
|
|
|
|
Цитата korvin @ Цитата Повстанець @ Можешь ссылаться на меня. Если у тебя есть другое определение константности объекта, с удовольствием его послушаю. меня интересует, как теория ООП(ну или известная литература/специалисты по ООП) определяют механизм, изменяющий интерфейс объекта (и видимо всех его членов-объектов). таков был вопрос вообще-то. А как это связано с const? Интерфейс объекта не меняется. Просто ты говоришь: "я не буду менять состояние этого объекта". Затем, если ты скажешь "измени объект", то компилятор скажет тебе: "незя". Так понятно? |
|
Сообщ.
#773
,
|
|
|
|
Цитата Повстанець @ Какая теория ООП? Программирование стало академической наукой? Где я был в это время? Нет никакой теории. Ести ИМХО отдельных специалистов. Ты конечно хочешь мне намекнуть, что такого понятия, как константный объект нет. Но ведь константные объекты есть, а понятия нет. Как так получается? Если его действительно нет -- считай меня пионером и можешь смело ссылаться. программирование -- это не только код писать. фразы "Теория алгоритмов", "Теория автоматов", "Теория типов" тебе ни о чем не говорят? да, для ООП не существует единой теории ввиду наличия разных интерпретаций первичных постулатов. но есть общепризнанные труды, Г.Буча например, Мейера того же. нет, я хочу тебе намекнуть, что нет формального описания в литературе по ООП механизма, изменяющего интерфейс объекта с мутабельного на иммутабельный, поэтому заявлять, что язык, в котором этот механизм искаробки на уровне языка реализован, является Ъ-ООПшным, а все остальные -- нет, как-то необосновано. |
|
Сообщ.
#774
,
|
|
|
|
--Ins--, ну ты прям считаешь, что разработчики C++ - глупы.
Цитата --Ins-- @ 1. А метод объекта можно вызвать? Да, константный. Цитата --Ins-- @ А в метод другого объекта ссылку на себя параметром передать можно? Да, константную. Цитата --Ins-- @ А метод просто другого объекта вызвать можно? Ессно глобальные объекты константными не будут |
|
Сообщ.
#775
,
|
|
|
|
Цитата --Ins-- @ Цитата Повстанець @ Ошибкой при любой попытке изменить состояние своих полей, или состояние любого из предков. 1. А метод объекта можно вызвать? 2. А в метод другого объекта ссылку на себя параметром передать можно? 3. А метод просто другого объекта вызвать можно? 1. можно, если они const'антные 2. const'антную 3. да --Ins--, фактически константный метод, это такой метод, куда this передается как указатель на константный объект. |
|
Сообщ.
#776
,
|
|
|
|
Цитата Мяут-Настоящий @ Цитата korvin @ угу, вот так взяли и одним махом изменили интерфейс объекта, описанный в его классе. Ээээ, наоборот, конкретизировали: ![]() ![]() class C { public: int f() const { //Здесь гарантируется, что объект неизменен } }; 1) при чем тут конкретизация интерфейса? 2) как конкретизация может быть противоположной по смыслу изменению? |
|
Сообщ.
#777
,
|
|
|
|
Цитата korvin @ нет, я хочу тебе намекнуть, что нет формального описания в литературе по ООП механизма, изменяющего интерфейс объекта с мутабельного на иммутабельный Он не меняет интерфейс. Вообще никак. Он позволяет в множестве элементов интерфейса определять группу операций являющихся иммутабельными. |
|
Сообщ.
#778
,
|
|
|
|
Цитата Мяут-Настоящий @ Ессно глобальные объекты константными не будут Что значит "глобальные объекты"? Просто об этом объекте кто-то еще может знать. Так можно или нет вызвать в константном методе метод какого-то другого объекта? Добавлено Цитата D_KEY @ 3. да А кто гарантирует, что в этом методе твой объект не будет изменен? |
|
Сообщ.
#779
,
|
|
|
|
Цитата korvin @ нет, я хочу тебе намекнуть, что нет формального описания в литературе по ООП механизма, изменяющего интерфейс объекта с мутабельного на иммутабельный Да не меняешь ты интерфейс. Кстати, const есть в С, куда попал из первоначальных версий С++. Так что ООП тут не причем. Добавлено Цитата --Ins-- @ Цитата D_KEY @ 3. да А кто гарантирует, что в этом методе твой объект не будет изменен? А как он будет изменен, если ты его туда не передавал? |
|
Сообщ.
#780
,
|
|
|
|
Цитата --Ins-- @ только константный.1. А метод объекта можно вызвать? Цитата --Ins-- @ Только константную.2. А в метод другого объекта ссылку на себя параметром передать можно? Цитата --Ins-- @ Если он не интегрирован то да. 3. А метод просто другого объекта вызвать можно? |