Можно ли считать, что свободно типизированный язык является объектно-ориентированным?

Может ли наглядный язык программирования, такой как PHP, действительно считаться объектно-ориентированным?

Я имею в виду, что методы не имеют возвращаемых типов, а параметры метода также не имеют объявленного типа.

Не требует ли метод класса иметь тип возврата? Не подписи методов имеют специфически типизированные параметры?

Как методы ООП помогают вам программировать на PHP, если вам всегда нужно проверять типы полученных параметров, потому что язык не применяет типы?

Пожалуйста, если я ошибаюсь, объясните мне это.

Когда вы разрабатываете вещи с помощью UML, тогда классы кода в PHP не имеют возвращаемых типизированных методов и параметров no-type ... Является ли код действительно совместимым с дизайном UML?

Вы тратите время на разработку своей архитектуры программного обеспечения, а затем компилятор не заставляет программиста следовать вашей конструкции во время кодирования, позволяя ему назначать любую переменную объекта любой другой переменной без предупреждения типа «несоответствие типа» .

6 голосов | спросил Tulains Córdova 21 AM00000060000002431 2012, 06:26:24

4 ответа


17

Классическими атрибутами ООП являются: наследование, полиморфизм и инкапсуляция. Не упоминается сильная типизация.

Я не знаю PHP, но я кодировал OOP Python, и он чувствует себя как OOP C #.

ответил dave 21 AM00000070000001631 2012, 07:24:16
8
  

Не нужно ли методам дизайна класса иметь возвращаемый тип?

Почему? Вы не изменяете сам код во время выполнения, поэтому метод имеет тип возвращаемого значения, независимо от того, был ли он предварительно объявлен или нет. Просто потому, что он не может быть применен, это не значит, что он не существует - он может быть явно выведен из самого кода.

  

Нет ли в подписях методов специально заданных параметров?

Опять же, нечего сказать, что метод не может просто быть либеральным в том, что он получает. Получить пользователя по id? Конечно, передайте строку или целое число. Как это нарушает объектно-ориентированное программирование ?

  

Как методы ООП помогают вам программировать на PHP, если вам нужно всегда проверять типы полученных параметров, потому что язык не применяет типы?

Здесь, основываясь на приведенных выше аргументах, я снова не понимаю, почему «дополнительная проверка», даже если это необходимо, делает методы ООП бессильными.

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

  

Когда вы разрабатываете вещи с использованием UML, тогда классы кода на PHP не имеют возвратно-напечатанных методов и параметров no-type ... Является ли код действительно совместимым с дизайном UML?

Хорошо, это зависит от вашего метода, не так ли? Что он на самом деле делает с входами и выводами?

Типирование все еще существует

Суть в том, что типы все еще существуют, они просто свободно или слабый 1 , и эти системы могут имеют определенные преимущества .

На самом деле некоторые IDE, такие как JetBrains (IntelliJ, PHPStorm), поддерживают все типы тип hinting с использованием PHPDocs для PHP . Поскольку я использовал его, он предоставляет почти все удобные предупреждения, клики, завершение кода и т. Д., Которые может предоставить IDE для строго типизированного.


1: «свободные» и «слабые» - это всего лишь плохая группировка; существует так много систем различного типа, что эти термины могут вызвать путаницу. См. информативный взгляд Эрика Липперта на этот раздел о переполнении стека.


Метод doc и встроенный пример

/**
 * @static
 * @param mixed $id
 * @return User
 */
public function getUserById($id) {
    ....
}

public function printUserName() {
    // code completion provided on getName method because of @return
    $name = $this->getUserById("5")->getName();

    // type hinting for arrays
    /** @var User[] $users */
    $users = array(new User());
}

Пример кастинга

public function checkUser(User $user) {
    if ($user instanceof Administrator) {
        /** @var Administrator $admin  */
        $admin = $user;
        $admin->logAccess();
    }
}
ответил Nicole 21 AM00000060000004631 2012, 06:44:46
5

Исходный объектно-ориентированный язык, в котором Алан Кэй представил концепцию, был Smalltalk . Он динамически типизирован.

На самом деле Алан Кэй упомянул, что классы и интерфейсы C ++ и Java - это not то, что он имел в виду, когда он изобрел объектно-ориентированное программирование. Таким образом, вопрос может быть, возможно, и в другом случае, могут ли статически типизированные языки быть объектно ориентированными.

  

Я имею в виду, что методы не имеют возвращаемых типов, а параметры метода также не имеют объявленного типа.   Не требуется ли методам класса для получения типа возврата? Не имеет ли подписи методов специфически типизированные параметры?

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

  

Как методы ООП помогают вам программировать на PHP, если вам нужно всегда проверять типы полученных параметров, потому что язык не применяет типы?

Вы не должны проверять полученные типы параметров. Вы должны просто называть методы на них. Это называется «утиная печать» (если она окунается как утка и ходит как утка, я бы назвал ее утиной, или если у нее есть методы, подобные X, это будет делать для X). Как обычно делаются в smalltalk, perl, python, ruby ​​и т. Д. И как это должно быть сделано в PHP.

ответил Jan Hudec 21 PM000000120000001731 2012, 12:18:17
3
  

Не нужно ли методам дизайна класса иметь возвращаемый тип?

Не совсем.

  

Нет ли в подписях методов специально заданных параметров?

Конечно. Просто потому, что типы не выполняются компилятором, это не означает, что не подразумевается контракт и семантика, которые требуются /реализуют методы.

  

Как методы ООП помогают вам программировать на PHP, если вам нужно всегда проверять типы полученных параметров, потому что язык не применяет типы?

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

ответил Telastyn 21 AM00000060000004131 2012, 06:41:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132