Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
1. Первая строчка - импорт класса, вторая - вызов... 25.10.05 02:28 Число просмотров: 1204
Автор: Heller <Heller> Статус: Elderman
|
> > use CGI qw/:standart/; > > $t=CGI->new(); > > print $t->header('text/html'); > > > > То же самое без обектов: > > > > print "Content-type: text/html\n\n" > >
> Первые две строчки в первом варианте > относятся не к ООП, а к его перловской реализации. А третья > строчка в первом варианте является самокомментирующейся > (если бы еще переменную t назвать более удачно), что > является признаком хорошего стиля. Более того, первый > вариант оставляет пространство для маневра, а второй - нет. > Если уж действительно УЧИТЬ программировать, то лучше учить > писать ГИБКО (yagni лучше выучить чуть позже).
1. Первая строчка - импорт класса, вторая - вызов конструктора. И то и другое имеет непосредственное отношение к ООП. Ну да не суть важно. Первый пример кода будет работать ЗНАЧИТЕЛЬНО медленнее, чем второй, так как, во-первых, нам надо подключить класс (по сути считать всю библиотеку CGI), а во-вторых мы вызываем конструктор, на что опять же совершаются действия, да и сам вызов метода объекта содержит в себе много лишнего (переход по ссылке, определение, к какому классу пренадлежит объект и как завершение вызов функции, в которой единственное что выполняется, это return "Content-type: $_[0]", при этом прежде чем это будет сделано будет еще куча проверок на количество аргументов). Конечно, в других языках такие проблемы, как полная загрузка библиотеки и проверка количества аргументов избегаются, но потерь всё равно не избежать. Ты же вроде совсем недавно спорил, что писать нужно все максимально эффективно? ;)
2. Насчет самокомментируемости не согласен. Прочитаю по-русски второй вариант:
Вывести строку "Тип-содержимого: текст/хтмыл".
Что непонятного? Теперь попробуй мне так же кратко описать на русском языке действие первого варианта. Я пытался - не получилось. Да и потом, всегда ведь можно написать простой комментарий - кто мешает?
3. В идеале, обектная модель человеческому мышлению может быть и ближе. Однако она сама по себе _на много_ сложнее. Функцию можно определить в двух словах как "программа, которая может принимать параметры, возвращающая некий результат". Функциональный подход, если я не путаю, изучают еще в школе по математике классе эдак в шестом. Таким образом любой бегиннерс, который доучился до шестого класса, уже усвоил для себя что есть функция и с чем ее едят. С объектами сложнее: во-первых, там достаточно много теории, которая далеко не сразу усваивается - классы, методы, переменные экземпляра, переменные класса, наследование, конструкторы, деструкторы, приватные данные, приватные методы, виртуальные методы - теории прямо скажем до хрена. Когда ты это все изучишь, оно, конечно, станет просто и понятно. Но это надо учить и это очень большой объем материала, чего не скажешь о функциях. Во-вторых, ООП интуитивно близка человеческому мышлению, когда мы рассматриваем абстрактные примеры. В программировании же не совсем очевидно, что консоль может быть объектом, который является членом какого-то непонятного класса.
4. Насчет строк, массивов и переменных. Кто-то из философов сказал: "Не надо плодить сущности без надобности". Чтобы работать со всем перечисленным, надо в любом случае понимать, что это такое на уровне структур данных.Дополнительновспоминать в данном случае о ООП - излишняя нагрузка информацией, которая по сути является абстракцией и не несет никакого прикладного смысла.
5. В любом случае, используя объектно-ориентированный подход, ты не убежишь от того, что придется рано или поздно создавать собственные классы и методы. А это есть ни что иное как написание тех же функций. В случае функций ты, конечно, тоже к объектам придешь, но зато уже с изначальным умением писать собственные классы и методы. Если же знать ООП, но не уметь писать функции, то это уже умственный инвалид получается (кстати, если возвращаться к тому коду на Perl, что я привел выше, то основная масса людей использует именно первый способ, а не простой print, именно потому, что по-другому они не умеют - а из-за этого огромные потери и падение эффективности).
|
|
|