Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 326 327 [328] 329 330 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4906
,
|
|
|
|
Где-то 100-200 страниц назад эта разница упоминалась, так что удачных поисков |
|
Сообщ.
#4907
,
|
|
|
|
В абстракции данных! Добавлено Цитата --Ins-- @ Где-то 100-200 страниц назад эта разница упоминалась, так что удачных поисков ![]() --Ins--, можешь привести пример, чем принципиально отличаются свойства от методов Get/Set ? Я может просто не понимаю слов, хочу |
|
Сообщ.
#4908
,
|
|
|
|
Цитата MyNameIsIgor @ Я не поленился перейти по "рейтинговой" ссылке D_KEY'я и вот что обнаружил! А чуть ранее мы читаем заботливо сохранённые для потомков тегом quote заветные слова Цитата Очередной бред дедушки. Ни одно его высказывание не сбывалось, да и ничего правильного тоже не говорил. Ну, и наконец, заветный порезанный пост. Ну слава Б-гу, не называл я Вирта старым маразматиком... Правда высказывание все-таки некрасивое, тем не менее, мне стало спокойнее Цитата и вы узнаете больше о несдержанном поведении мистера Стальные Нервы! Добавлено Цитата --Ins-- @ О, нашлася пропажа! Цитата MyNameIsIgor @ будет ли --Ins-- последовательным в своём крестовом походе и порежет ли свои слова "необучаемый дебил" в адрес Буду, если вы меня убедите в сравнимости оскорбительного подтекста в фразах "очередной бред дедушки" и "Этот человек уж очень любит ковыряться внутри и втолковать ему пользу инкапсуляции бесполезно и незачем" Тем не менее, я не вижу ничего оскорбительного в слове "дедушка", а "бред" - некрасивая формулирока моего отношения к тому, что было им сказано, а не к нему самому. Так что "маразматик" и т.п. - исключительно твои фантазии. Ты же указал на то, что человек не обладает способностью к восприятию, а это уже оскорбление. |
|
Сообщ.
#4909
,
|
|
|
|
Я вот допустим могу тоже заявить, что операция присваивания в С++ лучше/гибче чем в делфи, потому как она может работать с абстрактными данными. Допустим я запросто могу налабать оператор присваивания для кого нибудь инта.
И своему абстрактному классу запросто присвоить число типа integer. В делфи ЕМНИП отсуствует такая возможность перегрузки оператора присваивания. Что то типо этого и свойства собой представляют? |
|
Сообщ.
#4910
,
|
|
|
|
Но я себя не защищаю - был не прав.
Добавлено Пользуясь случаем, рекомендую SICP Добавлено Нет. А если мы представим, что сами методы могут являться объектами ? |
|
Сообщ.
#4911
,
|
|
|
|
Ох, как же вы
Когда вы перестанете смотреть в определение инкапсуляции, а вернётесь в обоснованию её наличия. Цель инкапсуляции - связать все детали реализиции с логической единицей с легко контролируемыми рамками, например, границами области видимости класса. А также сделать невозможным неконтролируемый доступ к деталям. Именно поэтому поля скрываются от публичного взора, а методы - не всегда. Потому что поля всегда доступны без контроля всякоразных инвариантов, а методы обеспечивают требуемый контроль. Точнее могут обспечить, ибо любители возвращать ссылки на поля не переведутся никогда, и толку от такой инкапсуляции выцензурено. А, korvin, я прав? Или такая инкапсуляция имеет право существовать согласно её определению? Или это не инкапсуляция, несмотря на её определение?Свойства обеспечивают не менее строгий контроль. Точнее могут обеспечить. Торчащая наружу сущность, выглядящая как поле, нарушает инкапсуляцию? Каким образом? Мне что, аттрибут цвета у машины из её ТТХ получать? Или всё-таки можно просто посмотреть? А чтобы перекрасить, достаточно будет пальцем дотронуться? Похоже пора опять из темы сваливать... |
|
Сообщ.
#4912
,
|
|
|
|
Цитата --Ins-- @ Где-то 100-200 страниц назад эта разница упоминалась, так что удачных поисков ЕМНИП касалось это индексации свойств Цитата scorpion @ можешь привести пример, чем принципиально отличаются свойства от методов Get/Set ? Удобней будет, если дверной замок открывать одним ключом, а закрывать другим? Скрытый текст Цитата korvin @ Цитата scorpion @ Интересно, как подлежащим можно выразить абстракцию для конкретного объекта? Ты не ответил на мой вопрос, чем свойства отличаются от методов Get/Set . Я могу с увереностью утверждать что глаголы абстрактнее существительных, потому как глаголы - выражают действие, а существительные - это просто предмет. причем в РЯ как подлежащим, так и сказуемым может выступать как глагол, так и существительное следовательно, лисп блииже к РЯ, чем к АЯ =) Цитата Фонвизин Правдин: Дверь, например, какое имя: существительное или прилагательное? Митрофан: Дверь? Котора дверь? Правдин: Котора дверь! Вот эта. Митрофан: Эта? Прилагательна. Правдин: Почему ж? Митрофан: Потому что она приложена к своему месту. Вон у чулана шеста неделя дверь стоит еще не навешена: так та покамест существительна. Добавлено Цитата korvin @ особенно когда нужно передать более одного значения... и ладно бы в делфи были кортежи, так ведь нету... Хмм, а у меня они есть (библиотекой ) Добавлено Цитата scorpion @ И своему абстрактному классу запросто присвоить число типа integer. В делфи ЕМНИП отсуствует такая возможность перегрузки оператора присваивания. Перегружать можно только рекорды, классы нет... но всегда можно найти выход, сделав рекорд полем (свойством ) класса. Добавлено Цитата Где-то 100-200 страниц назад эта разница упоминалась, так что удачных поисков Нашёл кстати Delphi vs C++ vs C# (сообщение #2813237) |
|
Сообщ.
#4913
,
|
|
|
|
Цитата Qraizer @ Ох, как же вы Когда вы перестанете смотреть в определение инкапсуляции, а вернётесь в обоснованию её наличия. Цель инкапсуляции - связать все детали реализиции с логической единицей с легко контролируемыми рамками, например, границами области видимости класса. А также сделать невозможным неконтролируемый доступ к деталям. Именно поэтому поля скрываются от публичного взора, а методы - не всегда. Потому что поля всегда доступны без контроля всякоразных инвариантов, а методы обеспечивают требуемый контроль. Точнее могут обспечить, ибо любители возвращать ссылки на поля не переведутся никогда, и толку от такой инкапсуляции выцензурено. А, korvin, я прав? Или такая инкапсуляция имеет право существовать согласно её определению? Или это не инкапсуляция, несмотря на её определение?вообще-то не только и не столько для этого, а для возможности менять реализацию, без влияния на клиентский код. был например у нас класс ![]() ![]() class A field1 field2 field3 method1 { uses field1 and field2 } method2 { uses field2 and field3 } end мы пересмотрели реализацию метода 1 например, написали новую реализацию, оказалось она не требует поля 1, убрали поле 1. ты в своих суждениях отталкиваешься от реализации, а нужно отталкиваться от интерфейсов. Добавлено Цитата DesweR @ ![]() что смешного? то, что ты РЯ в школе не учил? Цитата DesweR @ Хмм, а у меня они есть (библиотекой )небось тормозные и нетипобезопасные =) покажешь реализацию? |
|
Сообщ.
#4914
,
|
|
|
|
Цитата korvin @ что смешного? то, что ты РЯ в школе не учил? РЯ тут не причём Цитата korvin @ небось тормозные и нетипобезопасные =) покажешь реализацию? Особенного там ничего нет (дженерики и местами rtti), вот отрывок. До финальной версии ещё далеко. ![]() ![]() TTuple<T1> = class(TBaseTuple) strict protected FItem1: T1; FIsEmpty: Boolean; function GetCount: Integer; override; function GetNestedCount: Integer; virtual; function GetItem(const AIndex: Integer): TValue; override; function GetNestedItem(const AIndex: Integer; out AItem: TValue): Boolean; virtual; public constructor Create; overload; constructor Create(const AItem1: T1); overload; procedure ReCreate; overload; virtual; procedure ReCreate(const AItem1: T1); overload; inline; property Item1: T1 read FItem1; end; TTuple<T1, T2> = class(TTuple<T1>) strict protected FItem2: T2; function GetNestedCount: Integer; override; function GetNestedItem(const AIndex: Integer; out AItem: TValue): Boolean; override; public constructor Create; overload; constructor Create(const AItem1: T1; const AItem2: T2); overload; procedure ReCreate; overload; override; procedure ReCreate(const AItem1: T1; const AItem2: T2); overload; inline; property Item2: T2 read FItem2; end; и т.п... ![]() ![]() var Tuple: TTuple<Integer, Char>; begin Tuple := TTuple<Integer, Char>.Create(123, 'A'); ... := Tuple.Item1; ... := Tuple.Item2; end; |
|
Сообщ.
#4915
,
|
|
|
|
Цитата DesweR @ Удобней будет, если дверной замок открывать одним ключом, а закрывать другим? Нет конечно. Но в моем примере ключ один и замок один. Ты просто немножко путаешь. Ключ - это объект, а вот Открыть/Закрыть - это его методы Get/Set. |
|
Сообщ.
#4916
,
|
|
|
|
Цитата DesweR @ Особенного там ничего нет (дженерики и местами rtti), вот отрывок. До финальной версии ещё далеко. Есть мнение, что даже в boost'е на C++03 они красивее сделаны... |
|
Сообщ.
#4917
,
|
|
|
|
Цитата korvin @ ты в своих суждениях отталкиваешься от реализации, а нужно отталкиваться от интерфейсов. А если объекты нашего класса должны владеть объектами некоторых других классов, причем согласно предметной области, а не реализации? Тут Flex приводит пример. Добавлено Цитата DesweR @ Особенного там ничего нет (дженерики и местами rtti), вот отрывок. Ужас. Неужели нельзя сделать хотя бы списки типов(по типу лисповских обычных типов, но во время компиляции для дженериков), чтобы не копипастить? |
|
Сообщ.
#4918
,
|
|
|
|
Цитата scorpion @ Ключ - это объект, а вот Открыть/Закрыть - это его методы Get/Set. Да нет. Объект - это замок, а Get/Set - открыть ключом, либо закрыть ключом замок (получить методом данные, либо записать методом данные). Цитата D_KEY @ Ужас. Неужели нельзя сделать хотя бы списки типов Во первых, как ты представляешь доступ к элементам кортежа? Мне хотелось бы что-нибудь более-менее читабельное, типа Item1, Item2..ItemN, ну и конечно типобезопасное. Собственно исходя из этого кортежи "расширял" производными классами. Во вторых и на кой ляд они тогда нужны? ![]() ![]() TTuple<T1> = class(TBaseTuple) strict protected FItem1: T1; ... public ... property Item1: T1 read FItem1; end; TTuple<T1, T2> = class(TTuple<T1>) strict protected F : T2; ... public ... property Item2: T2 read FItem2; end; ... := Tuple.Item1; ... := Tuple.Item2; Цитата MyNameIsIgor @ Есть мнение, что даже в boost'е на C++03 они красивее сделаны... Добавлено Цитата D_KEY @ чтобы не копипастить? И да, "копипаст" там до восьми элементов |
|
Сообщ.
#4919
,
|
|
|
|
Цитата DesweR @ как ты представляешь доступ к элементам кортежа? Мне хотелось бы что-нибудь более-менее читабельное, типа Item1, Item2..ItemN, ну и конечно типобезопасное. Именно так. Цитата Во вторых и на кой ляд они тогда нужны? Кто "они"? Списки типов позволят тебе избавится от копипасты "логики" релизации кортежа, останется лишь копипаста для перечисления типов элементов. Под списками типов понимается нечто в таком духе: ![]() ![]() template<typename H, typename T> struct TypeList { typedef H Head; typedef T Tail; }; struct NullType {}; Цитата Что тебе там не понравилось?Цитата MyNameIsIgor @ Есть мнение, что даже в boost'е на C++03 они красивее сделаны... С использованием нового стандарта кортежи делаются красиво и просто. |
|
Сообщ.
#4920
,
|
|
|
|
Цитата D_KEY @ Именно так. Ну покажи (и хочется чтобы ещё Code Completion их отображал во всплывающем окошке, чтоб не держать в голове все типы элементов). Добавлено Цитата D_KEY @ Под списками типов понимается нечто в таком духе: Я знаю |