Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2008-01-16 18:18:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Об ООП
Пора бы как-то разобраться с ООП и закрыть эту тему для себя. По возможности, окончательно. Предварительные выводы, скорее уж проектируемые направления работы:

1. Типы (интерфейсы, наследование классов от интерфейсов, правила переопределения функций в производных классах) есть более или менее удачная попытка реализовать строгую типизацию языков ООП. Неудачная типизация ограничивает возможности языка и ограничивает мышление программиста, воспитанного на основе её изучения. Чтобы разобраться в ООП, типизацию необходимо послать подальше.

2. Наследование (классов от других классов) есть некоторый (со своими возможными граблями) паттерн повторного использования кода, поддерживаемый языком. Вообще, ввод понятия класса есть опять же некий паттерн реализации минимальных функциональных элементов в ООП. Чтобы разобраться в ООП, идею наследования и классов желательно подвинуть в сторону.

3. ООП не универсально. Не всё ложится в его схему, и не должно ложиться. Даже моделирование объектов внешнего мира может не уложиться в конкретную ООП-схему. Может ли уложиться хоть в какую-то -- вопрос открытый. Им стоит заняться.

4. Правильное построение механизма наследования и типизации есть крайне нетривиальная задача. Только после проработки первых трёх пунктов имеет смысл ей как-то заняться.


(Добавить комментарий)


[info]iwr@lj
2008-01-29 11:34 (ссылка)
тьфублин... я думал, ты про אש"ף

(Ответить)


[info]dumalkin@lj
2008-02-29 18:47 (ссылка)
"По следам бременских музыкантов" - обнаружил что за 14 лет работы практически не используется наследование реализаций, а там где использовалось - было больше головной боли чем удобства. Наследование интерфейсов / абстрактов - повсеместно.

По поводу 3 - а как определить является ли конкретное решение задачи ООП ? Все известные мне промышленные языки ООП (С++/Джава/Шарп) свободно позволяют писать абсолютно не-ООП вещи. В тоже время писал проект по превращению "просто Лиспа" - без CLOS в язык совместимый по фичерам с С++.

(Ответить) (Ветвь дискуссии)


[info]yigal_s@lj
2008-03-01 11:02 (ссылка)
> практически не используется наследование реализаций, Хотя, казалось бы, вещь архи-полезная. Тому, кто не согласится, ответ прост: "зелен вингорад". > По поводу 3 - а как определить является ли конкретное решение задачи ООП ? так дело не в языке, а в построении программы. объекты шлют друг другу сообщения (зачастую не имея полной информации о реализации тех объеков, с которыми общаются), в результате на выходе имеем работающую программу. Вот, скажем, можно ли в ООП запихать моделирование солнечной системы. Типа, Солнце шлёт планетам информацию о том, что оно их притягивает, планеты шлют подобную информацию Солнцу же и друг другу, а надо всем этим стоит Бог программист и клянёт тот день, когда поверил в ООП-методологию.

(Ответить) (Уровень выше)