Re[6]: Интерфейсы, ООП
От: Sorc17 Россия  
Дата: 01.05.12 13:42
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Здравствуйте, Sorc17, Вы писали:


S>>Это не объяснение Зачем-то же так сделали разработчики языков. Наверное они на какой-то науке основывали своё решение.

0>Ключевые слова для гугления: Information Hiding, Encapsulation.

Ага. Я вот буквально пару минут назад у своих друзяшек в google+ спросил, а только ли для инкапсуляции придумали такие вещи как private, final, protected? Или есть ещё какие-то глубокие и не очевидные причины.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[7]: Интерфейсы, ООП
От: 0x7be СССР  
Дата: 01.05.12 14:17
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Ага. Я вот буквально пару минут назад у своих друзяшек в google+ спросил, а только ли для инкапсуляции придумали такие вещи как private, final, protected? Или есть ещё какие-то глубокие и не очевидные причины.

А этих недостаточно?
Re[7]: Интерфейсы, ООП
От: 0x7be СССР  
Дата: 01.05.12 14:20
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Вообще моя тема выросла из вопроса, как обосновать, что в коде нужно использовать ООП.

Мне кажется, что вопрос неправильный. Не надо спрашивать "как обосновать необходимость использования Х?", надо спрашивать "что здесь надо использовать?"

S>...Подобные вопросы похожи на болото, в них нет конкретики, меня это раздражает, казалось бы, в программировании сплошь и рядом точные науки, а тут такая лабуда получается.

Именно так. ООП — это вообще чистое ремесленничество, у него нет строгой формальной базы или хотя бы единого определения, что есть ООП. В итоге ООП больше напоминает религию со всем сопутствующим словоблудием.
Re[8]: Интерфейсы, ООП
От: Sorc17 Россия  
Дата: 01.05.12 14:26
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Здравствуйте, Sorc17, Вы писали:


S>>Ага. Я вот буквально пару минут назад у своих друзяшек в google+ спросил, а только ли для инкапсуляции придумали такие вещи как private, final, protected? Или есть ещё какие-то глубокие и не очевидные причины.

0>А этих недостаточно?

Ну вдруг есть ещё что-то о чём я даже не подозреваю, интересно же
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[9]: Интерфейсы, ООП
От: 0x7be СССР  
Дата: 01.05.12 14:29
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Ну вдруг есть ещё что-то о чём я даже не подозреваю, интересно же

Я не знаю
Re: Интерфейсы, ООП
От: Wolverrum Ниоткуда  
Дата: 01.05.12 16:25
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?


S>
S>class MyInterface {
S>    void method(arg) {
S>        system_exit("Сперва реализуй, а потом пользуйся, балбес!")
S>    }
S>}
S>

S>Чем это не интерфейс?

abstract class MyInterface {
    public abstract void method(arg);
}

Вот это — "почти" интерфейс. И, скорее всего, костыль, изобретенный на пути к "настоящим" интерфейсам.
Re: Интерфейсы, ООП
От: x-code  
Дата: 02.05.12 05:09
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?


Интерфейсы это не просто классы без реализации, это именно интерфейсы. Они не имеют смысла без полиморфизма. ИМХО, одни из лучших применений интерфейсов — передача функциональности без передачи самого объекта, реализующего эту функциональность (некая ООП-замена передачи функций как аргументов в другие функции).

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

interface I_GuiCallback 
{
  void SetProgressRange(int n);
  void SetProgressPos(int i);
  void SetStatusText(string text);
}


Класс окна наследует этот интерфейс и реализует его методы, в которых осуществляется работа с конкретными прогресс барами и т.д.
А класс, который занимается обработкой, при инициализации получает этот интерфейс для того, чтобы управлять окном, ничего не зная про само окно. В случае С++ это весьма полезно, так как достигается кроссплатформенность класса обработки, и вообще появляется некая универсальность, уменьшается завязанность отдельных частей кода и т.д.
Re[7]: Интерфейсы, ООП
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.05.12 05:15
Оценка: +1
Здравствуйте, Sorc17, Вы писали:

S>Ага. Я вот буквально пару минут назад у своих друзяшек в google+ спросил, а только ли для инкапсуляции придумали такие вещи как private, final, protected? Или есть ещё какие-то глубокие и не очевидные причины.

Только для инкапсуляции. Точнее, для возможности определять для одного и того же класса различные контракты по отношению к другому коду, в зависимости от того, что это за код. То есть protected позволяет классу выставлять наружу специальный контракт для наследников, не давая к нему доступа для посторонних. Набор этих "модификаторов доступа" зависит от структуры кода. В дотнете появляются сборки — и вместе с ними модификатор internal. В Delphi появляется отдельная сущность "визуальный дизайнер", и для него появляется модификатор published.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Интерфейсы, ООП
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.05.12 21:11
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?


Формально прав. На практике же удобно когда есть способ описать интерфейс (в общем смысле этого слова) гарантированный не содержащий реализации. Так что в С++ я бы интерфейсы тоже ввел бы, не смотря на то, что физической необходимости в этом нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Интерфейсы, ООП
От: Sorc17 Россия  
Дата: 04.05.12 10:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Sorc17, Вы писали:


S>>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?


VD>Формально прав. На практике же удобно когда есть способ описать интерфейс (в общем смысле этого слова) гарантированный не содержащий реализации. Так что в С++ я бы интерфейсы тоже ввел бы, не смотря на то, что физической необходимости в этом нет.


Спасибо
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: Интерфейсы, ООП
От: dmitryalexeeff  
Дата: 15.05.12 07:10
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?


S>
S>class MyInterface {
S>    void method(arg) {
S>        system_exit("Сперва реализуй, а потом пользуйся, балбес!")
S>    }
S>}
S>

S>Чем это не интерфейс?

На тебе упрощалку:
Интерфейс это как-бы абстрактная сигнатура объекта(класса), по аналогии с сигнатурой функции.
Вот и всё. Очевидно, что абстрактный корневой класс тоже обеспечивает общую сигнатуру для всех потомков. И множественное наследование обеспечивает общую сигнатуру для объектов.
Re: Интерфейсы, ООП
От: __kot2  
Дата: 18.05.12 17:36
Оценка:
Здравствуйте, Sorc17, Вы писали:
S>Интерфейсы — это просто классы без реализации. В Яве их вообще сделали в качестве костылика вместо множественного наследования. Ни какого другого смысла в них нет. Я не прав?
интерфейсы это очень важное самостоятельное понятие

попробуй дать определение того, что такое пуговица.
не сможешь. правильное определение — все, что удовлетворяет интерфейсу пуговицы (соединить-разьединить), есть пуговица
Re: Интерфейсы, ООП
От: Roman Odaisky Украина  
Дата: 18.05.12 22:03
Оценка: +1
Здравствуйте, Sorc17, Вы писали:

S>Интерфейсы — это просто классы без реализации. Никакого другого смысла в них нет.


Интерфейс, в отличие от большинства языковых средств, представляет собой некое анти-средство, намеренно ограничивающее функциональность. Как private, const и т. п. Служит для избежания ошибок и побуждения программиста следовать определенному подходу.

Я бы еще, продолжая в том же духе, запретил наследоваться от классов, только от интерфейсов. interface I2 extends I1, class C implements I1, I42, и всё.
До последнего не верил в пирамиду Лебедева.
Re: Интерфейсы, ООП
От: Ромашка Украина  
Дата: 18.05.12 22:45
Оценка:
Здравствуйте, Sorc17, Вы писали:
S>Чем это не интерфейс?

Ничем. Ты розетку на стене, к которой комп подключен, видишь? Это реализация интерфейса. Знаешь нафига оно придумано? Чтобы ты засунул туда утюг? А вот фиг тебе, не угадал, для этого конкретная реализация розетки существует. Интерфейс описывают чтобы туда USB не прикрутил.


Всё, что нас не убивает, ещё горько об этом пожалеет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.