Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 125 126 [127] 128 129 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1891
,
|
|
|
|
Ну, ФП какое-то там есть, вроде бы. Писали тут примеры. А вот с ЛП как?
|
|
Сообщ.
#1892
,
|
|
|
|
Цитата Qraizer @ Ну, ФП какое-то там есть, вроде бы. Писали тут примеры. А вот с ЛП как? наличие ссылок на функции -- еще не ФП. а с ЛП так же, как и в C++ |
|
Сообщ.
#1893
,
|
|
|
|
Та ссылки-то понятно. Так же как и указатели. А вот анонимные функции, как и лямбды, уже ближе.
|
|
Сообщ.
#1894
,
|
|
|
|
Цитата korvin @ модули ортогональны каким-бы то ни было парадигмам. хочешь, юзай ООП, хочешь -- процедурное [, хочешь (если бы делфи позволяло) -- ФП. или там ЛП.] Если модуль - это просто контейнер, то соглашусь. Но ведь модуль - это логическая единица декомпозиции программы. С этой точки зрения, парадигма играет достаточно большую роль. Добавлено Цитата Qraizer @ Та ссылки-то понятно. Так же как и указатели. А вот анонимные функции, как и лямбды, уже ближе. В отсутствии gc лямбдами ты не всегда сможешь воспользоваться в полную силу(если только не станешь все копировать), сможешь легко получить обращение по ссылке к уже уничтоженному объекту, да и с shared_ptr можно проблем обрести и отлавливать потом утечки памяти... Это конечно решаемо с помощью weak_ptr'ов, но ведь все опять же руками... |
|
Сообщ.
#1895
,
|
|
|
|
Модули - это средства декомпозиции программного кода, в отличие от классов, которые являются средством декомпозиции программной модели, поэтому и сравнивать тут нечего, сравнение неуместно просто. Модули обеспечивают инкапсуляцию, подобно классам, но это совсем другая инкапсуляция: классы посредством инкапсуляции регулируют доступ к данным объекта, модули - к коду |
|
Сообщ.
#1896
,
|
|
|
|
Цитата --Ins-- @ Модули - это средства декомпозиции программного кода, в отличие от классов, которые являются средством декомпозиции программной модели Так зачем нужна декомпозиция модулей, если есть декомпозиция классов? |
|
Сообщ.
#1897
,
|
|
|
|
Цитата D_KEY @ Так зачем нужна декомпозиция модулей, если есть декомпозиция классов? Читай выше, я добавил |
|
Сообщ.
#1898
,
|
|
|
|
Цитата --Ins-- @ Модули обеспечивают инкапсуляцию, подобно классам, но это совсем другая инкапсуляция: классы посредством инкапсуляции регулируют доступ к данным объекта, модули - к коду В чем отличие "данных" и методов объекта/класса от кода с точки зрения ООП? |
|
Сообщ.
#1899
,
|
|
|
|
D_KEY, код - это не только методы, это еще и типы, плюс методы, которые к обработке данных класса отношения не имеют (статик-методы). Вот оборачивание их в классы - это какая-то чушь, ничего общего с ООП не имеющая. Я же говорю, подмена понятий произошла, классы взяли на себя то, для чего они не предназначены
|
|
Сообщ.
#1900
,
|
|
|
|
Цитата --Ins-- @ D_KEY, код - это не только методы, это еще и типы, плюс методы, которые к обработке данных класса отношения не имеют (статик-методы). Статические методы вообще не имеют отношения к ООП. В ОО-теории все действия обязательно связаны с объектом, который принадлежит к определенному классу. В гибридных языках статические методы могут служить разным целям, но они также являются внутренним делом класса и не касаются клиентов. Если же они открыты для доступа, то могут являться частью статического интерфейса типа(класса), что легко наблюдается в С++. Это же относится к внутренним типам. Классовые же методы являются частью динамического интерфейса класса. |
|
Сообщ.
#1901
,
|
|
|
|
Цитата D_KEY @ Статические методы вообще не имеют отношения к ООП. В ОО-теории все действия обязательно связаны с объектом, который принадлежит к определенному классу. Угу. Ну и как тут классы заменяют модули в этом случае? |
|
Сообщ.
#1902
,
|
|
|
|
Цитата --Ins-- @ Угу. Ну и как тут классы заменяют модули в этом случае? Вопрос лишен смысла, ты ведь сам сделал упор на статические методы |
|
Сообщ.
#1903
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Статические методы вообще не имеют отношения к ООП. В ОО-теории все действия обязательно связаны с объектом, который принадлежит к определенному классу. Угу. Ну и как тут классы заменяют модули в этом случае? В каком в этом? Про гибридные языки я уже написал. Да и в ООП языке статические методы можно рассматривать как статический интерфейс класса. Что тебе еще нужно от модулей? Со всем справляются или правило каждый класс в отдельном файле, или более универсальные единицы трансляции, как в С++(с отделением интерфейса от реализации). Модули же на уровне логики оказываются невостребованными. |
|
Сообщ.
#1904
,
|
|
|
|
D_KEY, ОК, давай на примере, который уже был...
![]() ![]() unit GDIPOBJ; // Опущено initialization begin // Initialize StartupInput structure StartupInput.DebugEventCallback := nil; StartupInput.SuppressBackgroundThread := False; StartupInput.SuppressExternalCodecs := False; StartupInput.GdiplusVersion := 1; // Initialize GDI+ GdiplusStartup(gdiplusToken, @StartupInput, nil); end; finalization begin if assigned(GenericSansSerifFontFamily) then GenericSansSerifFontFamily.Free; if assigned(GenericSerifFontFamily) then GenericSerifFontFamily.Free; if assigned(GenericMonospaceFontFamily) then GenericMonospaceFontFamily.Free; if assigned(GenericTypographicStringFormatBuffer) then GenericTypographicStringFormatBuffer.free; if assigned(GenericDefaultStringFormatBuffer) then GenericDefaultStringFormatBuffer.Free; // Close GDI + GdiplusShutdown(gdiplusToken); end; Как с этим справляются классы? Ну-ка, покажи-ка мне костылек? |
|
Сообщ.
#1905
,
|
|
|
|
Цитата --Ins-- @ D_KEY, ОК, давай на примере, который уже был... Я же отвечал. Создаем класс для работы с GDI+, работаем с объектом этого класса. Более того, может существовать абстрактный класс(интерфейс), наследником которого является данный, наравне с другими классами, реализующими тот же функционал, но другими средствами. Можешь сделать синглтон, если угодно, можешь сделать один статический объект внутри класса, отвечающий за инициализацию/очистку. В чем проблема? Смешивать низкоуровневую логику(кроме того, выполненную в структурном стиле) с высокоуровневой не стоит. |