За последние 24 часа нас посетили 18636 программистов и 1702 робота. Сейчас ищут 870 программистов ...

ООП

Тема в разделе "PHP для новичков", создана пользователем host, 2 авг 2007.

  1. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    под типизацией я понимаю явную или неявную проверку типа на входе функции. а мешает ооп потому, что это коп (классово ориентированное программирование).
    делать проверку типа - это всё-равно, что в ресторане повесить табличку "только для белых" в то время как нужны просто прилично одетые люди с достаточным объёмом кошелька.
    требуя определённый тип мы по сути диктуем внутреннее устройство объекта, что несколько противоречит инкапсуляции. да, можно отнаследоваться и что-то измнить, но например, удалить какой-то метод или поле нельзя, да и перегружать методы может потребоваться тучу - вот и получаются классы с кучей методов-заглушек.
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    пых поддерживает вызов функций с переменным числом параметров...
     
  3. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    ...но не поддерживает произвольное число конструкторов у класса.
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Всё дело в отсутствие такого понятия, как перегрузка функций на уровне языка. Имеются только костыли ввиде переменного числа параметров.
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    $a= new Date ();
    $b= new Date (time());
    $c= new Date ($b);
    $d= new Date ('greg',time());
    первые три нотации - достаточны в большинстве случаев и последняя специально для "произвольного количества"


    Sergey89, перегрузка функций только добавляет путаницы... у функции не зависимо от параметров должна быть одна точка входа, иначе отладка превращается в мечту мазохиста.
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    $b= new Date (time());
    vs.
    $b=time();
    ;)
     
  7. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    Проверка количества и типов параметров, и последующее ветвление алгоритма методу тоже красоты не добавляет. Если тебе нужно три разных способа собрать объект - этим должны заниматься три разных метода. И названия этих методов должны быть "говорящими", чтобы отладка выражений "new Date($anotherDate)" не превратилась в мечту мазохиста.
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Dagdamor, в первом случае у тебя получается объект, который в зависимости от реализации может хранить даты и до рождества христова, во втором же - просто число которое может обозначать весьма скромный диапазон дат.
    к тому же new Date(); имеет смысл сделать равносильной new Date (time());
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А вобще, для извращения с датами в PHP прекрасно подходят strtotime и date.
     
  10. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Sergey89, вот как раз для извращений они и не подходят :) запиши как мне с их помощью что-нибудь из 8 века до нашей эры :)

    Dagdamor, смотри 4 нотацию...
     
  11. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    Это плата за то, что кроме даты, в формате также присутствует и время; а время в реальных приложениях бывает нужнее, чем даты до 1970 года. Кстати, это хороший пример. У нас есть класс, который умеет хранить дату (произвольную, хоть 1 января 100 года). Есть набор методов, которые умеют с датами выполнять всякие манипуляции (прибавлять/отнимать промежуток, вычислять разницу между датами и т. д.). Потом тебе понадобился класс, который кроме даты, хранит еще и время, и ты унаследовал этот новый класс от Date. Как быть с существующими методами? Все переписывать?
     
  12. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Код (Text):
    1. Потом тебе понадобился класс, который кроме даты, хранит еще и время, и ты унаследовал этот новый класс от Date.
    это типа у двух белых родителей родился чернокожий ребёнок? :) Time - это самостоятельный класс со всеми вытекающими
     
  13. Anonymous

    Anonymous Guest

    *пришел с улицы*: холивар, холивар, ура!!!
    *Вспоминает, что для холивара он и привлек ярого Сишника Стингыча*
    *чертовски доволен, пока холивар не переходит на личности*
     
  14. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    dark-demon
    А вот и нет - дата и время вместе образуют неразрывную сущность - назовем ее "момент" (или "штамп" :))
    Вовсе не чернокожий, имеет право на существование, зачастую необходим.

    Горбунов Олег, ;)
     
  15. JStingo

    JStingo Активный пользователь

    С нами с:
    4 авг 2007
    Сообщения:
    7
    Симпатии:
    0
    Я потихоньку сползаю под стол..... в чем

    Код (Text):
    1. $date=time() //конструирует данные внутри функции - это не создание из внешних данных
    2. $date = new Date(5, 8, 2007) //вот это конструктор, а не то что вы написали
    А вот это вообще идиотизм!
    Код (Text):
    1. $b= new Date (time());
    2. //vs.
    3. $b=time();
    Я не понял, а что возвращает функция time()? уж не объект ли типа Date? или что-то другое? Я приводил тип даты чисто абстрактно не сводя к конкретике языка, а вы мне тут какую-то ахинею пишите.

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

    Мой совет такой, кто хочет изучить ООП (а изучить его, наверное, стоит всем) учите его на примере С++ или Java иначе вам будут попадаться такие жалкие обгрызки.
     
  16. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    JStingo
    С добрым утром :)
    Мы здесь как раз обсуждаем особенности ООП на ПХП.
    Даже в первой мессаге учебник по ПХП, и примеры на ПХП.
    Про другие языки никто не говорит... и если ты думаешь, что здесь никто не знает ни одного языка кроме ПХП, сочувствую.
     
  17. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    ИМХО
     
  18. JStingo

    JStingo Активный пользователь

    С нами с:
    4 авг 2007
    Сообщения:
    7
    Симпатии:
    0
    Зачем? Функции работающие с базовым классом будут прекрасно работать и с производным. Где проблема? Не вижу хоть убей.
     
  19. JStingo

    JStingo Активный пользователь

    С нами с:
    4 авг 2007
    Сообщения:
    7
    Симпатии:
    0
    Особенности? я сказал, что ООП не должен доходить до идотии, как в том примере в начале. Согласен большинство задач на ПХП носит линейный характер, к тому же работа приложения в браузере имеет ОООГРОмное число различий с работой обычных приложений. НО человек ведь спрашивал про ООП, что такое и с чем его едят. Я и пытался это рассказать, пусть даже на абстарктном примере.
    Ваш подход понятен, что ООП почти не нужен, поэтому его можно и не знать. Правда есть одно но, вы то его, в отличии от спрашивающего, знаете, а он не знает.
     
  20. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    JStingo
    Не передергивай мои слова; я не говорил, что его "можно и не знать". Его нужно знать, но применять с головой.
    А спрашивающий, между прочим, попросил _реальный_ пример, на котором использование ООП оправдано. Его я так и не увидел.
     
  21. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    http://php.ru/forum/viewtopic.php?p=56463#56463 - вот _реальный_ пример, который без ооп превращается в спагетти. чтобы добавить номый драйвер субд мне достаточно добавить один файл и всё, ничего нигде не изменяя. а в случае процедур - пришлось бы искать все проверки и их исправлять...
     
  22. host

    host Активный пользователь

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    Dagdamor+2
    я его уже практически знаю :) Но где, когда и зачем - вот вопрос.
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    нет, это всё - различные сущности. время не имеет даты, а дата не имеет времени и наследовать одно от другого - глупость. а штамп - это дата плюс время.
    а вообще я, когда говорил про Date, подразумевал именно штамп.
     
  24. JStingo

    JStingo Активный пользователь

    С нами с:
    4 авг 2007
    Сообщения:
    7
    Симпатии:
    0
    host, значит ты его не знаешь, если думаешь где и зачем, да и суда по твоим вопросам ты явно плаваешь в материале. Вообще большая часть концепций (интерфейсные классы, виртаульные функции и др.) в ПХП просто выкидывается из-за мягкой типизации. Поэтому в ПХП невозможно понять назначение многих вещей из ООП, т.к. в них как бы пропадает надобность.
    Я признаю, что программировал на ПХП очень не много, поэтому у меня не появились собственные реальные примеры, где это нужно. Именно для этого я и советовал изучать ООП сперва на нормальном ОО-языке, а потому уже решать, где в ПХП он нужен.
    На этом я с вам распрощаюсь, ибо спор идет не про ООП, а про косяки языка ПХП.
     
  25. Davil

    Davil Guest

    PHP:
    1. for($php=5;$php<$oop;[b]JStingo[/b]++);