Krishna
Я то спокоен. Я просто не люблю, когда несут чушь с авторитетным видом, которую потом читают новички и принимают её за истину.
А я не люблю, когда кто-то считает свое мнение единственным правильным, а все остальные - чушью. А еще не люблю предвзятого отношения.
Вернемся к ОО языкам.
Krishna
Да, я тоже в курсе, что дядя Фаулер так думает
Фаулер тут ни при чем. Это известный факт. ООП зародилось в Симуле-67, а затем в 1980 году было развито в Smalltalk-80. Можешь назвать ОО язык, который появился до 80 года (кроме Симулы)?
Тут спорить бессмысленно, даже в Википедии ты найдешь эти факты.
nerezus
В пхп все с джавы слизано в плане синтаксиса.
Многое слизано, но не все и не "в плане синтаксиса".
1. В Java и статические и динамические обращения осуществляются через точку, а в PHP различаются -> и :: , что больше похоже на C++
2. В Java поля класса видны в методе, а в PHP для тоступа к ним приходится использовать $this->
3. В Java для обращения к методам родителя использется super. , а в PHP parent :: ( при этом почему-то :: )
4. В PHP нет пакетов и соответсвенно нет модификаторов доступа к классам, только к методам.
5. try/catch слизали, finally не долизали.
6. В PHP есть __construct() __destruct(), в Java имя конструктора совпадает с именем класса, а деструкторов нет вообще.
7. В PHP конструктор наследуется, если его не переобъявить в потомке, а в Java - нет.
8. В PHP есть функции, в Java их нет.
и т.д....
Krishna
zerkms
Теперь по вашим просьбам поясняю как определить более и менее чистые ОО языки.
Для этого обратимся к основоположникам ООП. Цитирую Алана Кея:
объектно-ориентированный подход заключается в следующем наборе основных принципов:
1. Всё является объектом.
2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
3. Каждый объект имеет независимую память, которая состоит из других объектов.
4. Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов.
5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
Теперь обратим внимаение на то, как реализуются эти принципы в Smalltalk, Java и PHP:
1. Всё является объектом.
В Smalltalk реализуется полностью: все, включая константы и управляющие структуры, является объектами; свойства объекта являются объектами; объекты посылают сообщения, которые сами являются объектами.
В Java есть сущности не являющиеся объектами: базовые типы данным, массивы, управляющие структуры, операторы и т.д.
В PHP кроме того, что есть в Java, есть еще функции, ассоциативные массивы и глобальные переменные, что не вяжется с ООП.
2.Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
В Smalltalk как раз реализован механизм сообщений.
В Java используется концепция "вызовов метода как отправка сообщения", что является разумной практичной альтернативой. Но не все действия являются отправкой сообщения, т.к. существуют операторы и управляющие структуры.
В PHP также как в Java, но еще есть вызовы функций.
3. Каждый объект имеет независимую память, которая состоит из других объектов.
В Smalltalk свойства объекта действительно являются объектами.
В Java свойства объекта могут быть как объектами так и данными базовых типов.
В PHP свойста так же могут как объектами так и данными базовых типов.
4. Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов.
5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
Тут все нормально, кажется.
6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
В Smalltalk реализовано в полной мере.
В Java тоже (корнем иерархии классов является класс Object).
В PHP нету общего корня иерархии (или я плохо читал мануал?)
Теперь понятно какой язык можно считать более ОО.
PHP все-таки мультипарадигменный язык и изучать на его основе одну из парадигм не очень хорошая идея, ИМХО.
Krishna
Пояснения я привел. Если от тебя последуют ответы вроде "Это не аргумент" или ты начнешь придираться к мелочам, то я буду считать, что ты занимаешься троллингом.