The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Бета-выпуск языка программирования Rust 1.0"
Отправлено csdoc, 07-Апр-15 02:02 
> Различие между интерфейсом и реализаций видно очнеь легко - интерфейс - это
> объявления публичный членов, если речь идёт о классе.

То есть, на плюсах - любой класс у которого есть публичные члены является интерфейсом?
Интерфейсом даже является тот класс, который содержит какую-то реализацию? Путаница это.

> А вот желание везде именно явно отделить интерфейс, даже если он будет реализован
> один единственный раз, да чтобы это было именно слово interface - это как раз
> та проблема, о которой я и говорю. Для больших проектов такой подход окупается.

Для средних тоже. Отделяя интерфейс от реализации интерфейса, например,
очень легко и удобно делать юнит-тестирование кода, на время тестирования
подсовывая mock-классы вместо реально используемых в программе реализаций.

Есть такое очень хорошее видео:

https://www.youtube.com/watch?v=G6LJkWwZGuc
Николай Алименков — Парадигмы ООП

- это пожалуй лучшая презентация по ООП, что я когда-либо вообще видел.
Рекомендую. Скорее всего, она будет полезна и программистам на С++ тоже,
ведь принципы ООП везде одни и те же.

Первым советом идет всегда использовать интерфейсы. Это спорный совет,
но он говорит на основании своего многолетнего опыта программирования.

Иногда я этот совет нарушал и тогда было очень проблематично писать юнит-тесты.

> И да, плюсовые абстрактные классы в плане поведения от джавовских интерфейсов вообще
> ничем не отличаются. ТОлько и того, что ключевое слово разное, да
> для интерфейсов implements надо писать.

Абстрактные классы есть и в Java. Но это не то же самое что и интерфейсы.

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

> И да, до какого-то размера "не заморачиваться паттернами, а писать реализацию" -
> самый правильный подход. Потому что писанины меньше, а архитектура и так
> вся в голове помещается. И поддерживается - опять-таки, до определённого размера
> - такой код ЛЕГЧЕ, чем тот, где всё тщательно выписано.

Да, так. Из чего следует, что обсуждать мелкие проекты вообще смысла нет.
А на среднего размера и крупных проектов пользы от паттернов больше, чем вреда.

> Простите, но чтобы сообразить, что набор генераторов сущностей можно скомпоновать
> во что-то, что будет выдавать осмысленное сочетание - большого ума не надо.

Это сейчас, когда паттерн известен и хорошо изучен он кажется очевидным.
Когда-то явно этот паттерн не был выделен и его осмысление было открытием.

http://habrahabr.ru/post/170125/
Для чего нужны шаблоны проектирования

>>> А в случае джавы - антипаттерн или нет - но придётся наследоваться лишний раз.
>>С чего бы это вдруг? В Java есть интерфейсы. Там не нужно наследоваться.
> Ну "реализовывать интерфейс".

Если хочем иметь возможность менять реализации - да, надо отделить мухи от котлет,
и сказать, что вот это у нас интерфейс, а вот это у нас - реализация интерфейса.

> Суть в том, что в джаве  вы обречены иметь (и, соответственно, декларировать
> и поддерживать) какую-то общую сущность чтобы присвоить переменной
> значения различных типов.

Извините, а зачем переменной присваивать значения разных типов? Не понимаю.

> В плюсах же это не обязательно - пока не нужен динамический полиморфизм
> (а он, как ни странно, довольно редко нужен) - можно обойтись без наследования.

Порочным является исходное желание присвоить переменной значения различных типов.
А тогда когда это оправдано и имеет смысл - все объекты имеют один базовый класс.

>>> А интерфейс от абстрактного класса вообще ничем кроме названия не отличается.
>> "Что за бред, простите".
> Никакого бреда. Джавовский interface и плюсовый абстрактный класс
> (точнее, pure abstract class) функционально абсолютно идентичны.

Понятно. Я смотрю просто на это все с точки зрения языка программирования Java,
а там interface и pure abstract class - это совсем не одно и тоже, а разные сущности.

Вот об этом неудобстве в языке программирования С++ я как раз и говорю - невозможно
понять от чего мы наследуемся, от интерфейса или от реализации не посмотрев внутрь
базового класса.

В Java эти понятия очень четко разделены - интерфейс - это всегда только контракт,
а наследование от класса - это наследования реализации/поведения а не интерфейса.

Из-за чего - Java позволяет писать более понятный код, по сравнению с плюсами:

James Gosling: Java — это C++, из которого убрали все пистолеты, ножи и дубинки.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру