примеры грамотной реализации ООП

zerkms

TDD infected
Команда форума
пхпклуб - форум контрастов ;)
то споры вокруг того как в очередной раз исправить нотисы и уже отправленные хедеры, то флейм вокруг уже давно обмусоленныех тем и придирки друг к другу по поводу использования и формулироваия терминов
 

Alexandre

PHPПенсионер
Это уже модификации основных паттернов
слово модификация хорошо подходит только под "наследование".
если же еще дополняется композиция и агрегирование, то мы получаем качественно новый паттерн.

кстати - именно красивые архитектурные решения и состоят из набора стандартных кирпичиков, скоспонованных нестандартным образом.

большинство хороших практиков ООП, даже и не задумываются, какой паттерн они применяют. Они просто берут и строят свою архитектуру.

-~{}~ 22.05.06 17:51:

zerkmsсогл - тема перешла во флейм.
 

Romantik

TeaM PHPClub
строишь-строишь самолет, а в итоге опять получается трактор =)
 

Alexandre

PHPПенсионер
строишь-строишь самолет, а в итоге опять получается трактор =)
Андрей, раньше этот анекдот имел другую окраску:
как не собираешь трактор - а все танк получается...
 

zerkms

TDD infected
Команда форума
история умалчивает логическое окончание - а потом напильником полученное доводится до желаемого
 

Nirva

Dmitry Polyakov
Автор оригинала: Alexandre
Nirva, у меня нет под рукой Буча, но этого признака не достаточно для того чтоб назвать пхп ООП, этого достаточно для языка "объектного типа", типа паскаль.

один из признаков ООП языка (по Бучу или К. и В. ) - это типизация объектов. в пхп ее нет.

по определению нереализуема, так как пхп нетипизируемый язык. Нет механизма приведение типов. (это можно организовать, ног уже средствами самого языка - но это уже получится огород...)
абстрактная типизация и приведение типов - это один из краеугольных камней ООП.
ересь. цитирую
"в частностиЮ программирование не основанное на иерархических отношениях не относится к ООП , а называется программированием на основе абстрактных типов данных"
(с) тот же.
...
"Дойч определяет тип, как точную характеристику свойств, включая структуру и поведение, относяющуюся к некоторой совокупности объектов."
и совсем другое, что ты будешь прав полностью, если учесть, что
"Типизация - это способ защититься от использования объектов одного класса вместо другого, или, по крайней мере, управлять таким использованием".
управлять мы можем? можем. огород? относительно.
и добавим
"вегнер замечает, что такой способ контроля существенен для программирования в "большом""
и наконец - Smalltalk Буч определяет как ОО-языкЮ а типов там нет ;)

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

здорово мы тут воду разводим :)
 

Alexandre

PHPПенсионер
"Типизация - это способ защититься от использования объектов одного класса вместо другого, или, по крайней мере, управлять таким использованием".
управлять мы можем? можем. огород? относительно.
управлять, внутренними средствами языка не можем, или будем строить огород используя is_array() is_numeric(). Это уже не типизация. Конструкции типа
Код:
class someClass{
    function f(int a){some actions}
    function f(float a){some actions}
}
в пхп превращаются в огород.
здорово мы тут воду разводим :)
в споре - рождается истина. Аристотель
 

Nirva

Dmitry Polyakov
обратив внимание на первое, ты упустил
"вегнер замечает, что такой способ контроля существенен для программирования в "большом""
продолжу оттуда же
"деля расстояние на время мы ожидаем получить скорость, а не вес. в множении температуры на силу, смысла нет... все это примеры сильной типизации, когда прикладная область накладывает правила и ограничения на использование и сочетание абстракций"... конкретный язык программирования может иметь сильный или слабый механизм типизации, и даже не иметь вообще никакого, оставясь объектно-ориентированным."
кроме прочего типизация (наряду с сохраняемостью и параллелизмом) является дополнительным элементом оо-стиля.
и наконец-то пхп и без типизации, если объект не понимает сообщения сгененирует ошибку ;) разницы - никакой.
применительно к ооп нас скорее должны абстрактные типы, а не примитивные. поскольку пхп сам занимается приведением,объявление типов аргументов бессмысленно и абсурдно. суммируя: в пхп маловероятно программирование "в большом", совсем уж маловероятна проверка примитивных типов, и если вдруг по нелепой случайности понадобится вообще то да, у нас есть is_a() и is_array() и is_numeric().

следовательно, предлагаю в качестве установления истины следующее:
а) отказаться от слов о пхп как объектном языке
б) согласится, что признаком ооп является абстрагирование, иерархия, инкапсуляция, а типизацию можно рассматривать как "идеи ооп" (приравнять к, скажем, отсутвию множественному наследования, например, в java)
в) признать существование типизации (ключевое слово "возможность") абстрактной типизации в пхп
г) признать пхп - оояп

и истина родится :)
 

Solid

Drosera anglica
Говоря о типизации - в Ruby её нет (т.е. есть, но она примерно такая же как и PHP - неявная), но почему-то он считается сверх-объектно-ориентированным языком программирования.
Ruby is a complete, full, pure object oriented language: OOL. (http://www.ruby-lang.org/en/20020101.html)
 

Alexandre

PHPПенсионер
Nirva спориться можно ... можно признать (на местном уровне) пункты а) - г)... лично я не против. Как на это посмотрит мировая общественность?

Я высказал лишь точку зрения Буча, которое для меня так же была открытием, что языки типа пхп - языки объектного типа. Я его ранее считал ООПешным.
 

Nirva

Dmitry Polyakov
хм. ну я же вроде цитатами доказал, что ты немного заблуждался в точке зрения Буча. и я там открытия никакого не нашел.

а мировая общественность нас поддержит =)
 

Alexandre

PHPПенсионер
Nirva, у меня Буча нет под рукой, ответить я могу только в сл. понедельник, но у него есть цитаты, говорящие противоположное.

Значить - Буч противоречит сам себе (или это плохой перевод).
:)
 

Solid

Drosera anglica
Объектно-ориентированное программирование - это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

В данном определении можно выделить три части: 1) OOP использует в качестве базовых элементов объекты, а не алгоритмы (иерархия "быть частью", которая была определена в главе 1); 2) каждый объект является экземпляром какого-либо определенного класса; 3) классы организованы иерархически (см. понятие об иерархии "is а" там же). Программа будет объектно-ориентированной только при соблюдении всех трех указанных требований. В частности, программирование, не основанное на иерархических отношениях, не относится к OOP, а называется программированием на основе абстрактных типов данных.

В соответствии с этим определением не все языки программирования являются объектно-ориентированными. Страуструп определил так: "если термин объектно-ориентированный язык вообще что-либо означает, то он должен означать язык, имеющий средства хорошей поддержки объектно-ориентированного стиля программирования... Обеспечение такого стиля в свою очередь означает, что в языке удобно пользоваться этим стилем. Если написание программ в стиле OOP требует специальных усилий или оно невозможно совсем, то этот язык не отвечает требованиям OOP". Теоретически возможна имитация объектно-ориентированного программирования на обычных языках, таких, как Pascal и даже COBOL или ассемблер, но это крайне затруднительно. Карделли и Вегнер говорят, что: "язык программирования является объектно-ориентированным тогда и только тогда, когда выполняются следующие условия:

* Поддерживаются объекты, то есть абстракции данных, имеющие интерфейс в виде именованных операций и собственные данные, с ограничением доступа к ним.
* Объекты относятся к соответствующим типам (классам).
* Типы (классы) могут наследовать атрибуты супертипов (суперклассов)".

ЗЫ. Извиняюсь за большой кусок текста... Источник: http://khpi-iip.mipk.kharkiv.edu/library/case/buch/
 

Nirva

Dmitry Polyakov
я с удовольствием выслушаю опровергающие цитаты и в следующий понедельник или на конфе например :) хотя их не припомню =) и все же - истина дороже.

-~{}~ 23.05.06 11:21:

вот. тут наборщик Solid не поленился зацитировать целиком =) впрочем, ждем опровержений.
 

Solid

Drosera anglica
Вообще какая разница, является ли язык объектно-ориентированным или объектным!? Самое главное что бы было легко и просто кодить, что бы он работал как можно быстрее и создание программ на этом языке занимало if < time then ++.

-~{}~ 23.05.06 12:27:

И вообще, эту тему уже давно пора отправить в ОФФТОПКУ.
Жаль, конечно, что с конференцией ничего не получилось... а ведь так хотел. Столько интересных людей соберётся. Послушать, пообщаться. Эххх...
 

Alexandre

PHPПенсионер
Вообще какая разница, является ли язык объектно-ориентированным или объектным!? Самое главное что бы было легко и просто кодить, что бы он работал как можно быстрее и создание программ на этом языке занимало if < time then ++.
+1
 

facelift

Новичок
Я нашел про объектное программирование только одно:

Что на ЯВУ из файла программы (например main.c) компилятор создает объектный модуль (main.obj), а потом компоновщик (linker) линкует все такие файлы и другие подобные в один (exe, dll).

А вы тут про что разговариваете?
 

whirlwind

TDD infected, paranoid
Неважно, каким языком программирования ты владеешь, это - всего лишь инструмент. Главное, что этот инструмент позволяет решать поставленные перед тобой задачи.
:D (c) http://prolib.ru
 

grigory soid

Новичок
Автор оригинала: Solid
Вообще какая разница, является ли язык объектно-ориентированным или объектным!? Самое главное что бы было легко и просто кодить, что бы он работал как можно быстрее и создание программ на этом языке занимало if < time then ++.
-1

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

Alexandre

PHPПенсионер
Решающий фактор тут - поддержка технических требований к программе. Мне нравится событейные модели, но они сейчас хорошо реализованы не для веб-программирования.
Почему? ASP.NET - событийная модель (псевдо)

как мне сказали на одном из собеседований (на мое изречение, что в ASP.NET нет ничего нового) - ASP.NET заставила по новому взглянуть на WEB программирование.

чистая реализация событийной логики.
 
Сверху