Pull to refresh
  • by relevance
  • by date
  • by rating

Что такое полиморфизм на самом деле. В PHP он тоже существует.

PHP *
Написать этот пост побудила недавняя статья о полиморфизме. Она вызвала много споров, но знающие люди понимают, что автор написал скорее о наследовании и о переопределении методов, чем о полиморфизме. Не буду говорить ни хорошее ни плохое о той статье, а просто расскажу, что такое полиморфизм на самом деле. Дабы начинающие php-программисты не остались в заблуждении.
Читать дальше →
Total votes 136: ↑117.5 and ↓18.5 +99
Views 75K
Comments 82

Наследование шаблонов в Smarty

PHP *
Когда-то, давным-давно, мне пришлось использовать небезызвестный шаблонизатор Smarty. Сначала я, понятное дело, возмущался и кричал, какая же гадость эта заливная рыба Smarty, а потом «распробовал» и втянулся. Те удобства, которые он давал, с лихвой компенсировали мысли о том, что есть и более быстрые шаблонные движки.

Шаблоны я обычно строил с помощью инклюдов: в начале подключался header.tpl, в конце — footer.tpl, в середине ещё что-нибудь нужное. В целом разметка получалась довольно аккуратной, но не проходило ощущение, что не хватает чего-то важного. Окончательно понимание этого чего-то появилось, когда мне случилось написать простенькое приложение на Django. И это «что-то», как все поняли, оказалось наследованием шаблонов. Простая, как и всё гениальное, идея позволяла существенно упростить шаблоны и избавиться от дублирующих блоков.

А почему бы не реализовать подобный механизм в Smarty?
Total votes 65: ↑52.5 and ↓12.5 +40
Views 11K
Comments 54

Классы в Javascript: вызов методов родительского класса

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

Для меня «Классы» — это, скорее, подход к проектированию и реализации поставленной задачи. В нашем новом проекте такой подход используется по полной программе (и, я думаю, что он оправдывает себя на все 100%).
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Views 15K
Comments 94

JsOOP

Website development *
В статье речь пойдет об имитации классического ООП и строгой типизации в JavaScript (< 2.0).

Я расскажу про JsOOP – мини-фреймворк для написания JavaScript-кода в объектно-ориентированном стиле.

Читать дальше →
Total votes 40: ↑31 and ↓9 +22
Views 619
Comments 145

Работа с объектами в JavaScript: теория и практика

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

В статье НЕ будет ни слова про: эмуляцию традиционной класс-объектной парадигмы, синтаксический сахар, обертки и фреймворки.

Сложность материала будет нарастать от начала к концу статьи, так что для профи первые части могут показаться скучными и банальными, но дальше будет намного интереснее :)

если не боимся многабуков, то читаем дальше
Total votes 104: ↑103 and ↓1 +102
Views 191K
Comments 216

Применение наследования в шаблонах Mason

Perl *
Mason — достаточно известный и распространенный фреймворк для разработки Perl-приложений. Несмотря на простой синтаксис, он обладает достаточно широкими возможностями и высокой производительностью; имеет встроенные средства для интеграции с mod_perl и memcached. Освоить работу с mason очень просто — система хорошо документирована. В то же время, есть ряд интересных тонкостей, до которых документацию дочитывают не все. Возможно, именно поэтому код, который мне доводилось видеть, до боли напоминал неудачную поделку на PHP, в которой для упрощения жизни разработчик не использовал ничего сложнее разбивки на инклюдники. Можно ли на масоне писать лучше? По-моему, да.
Попробуем?
Total votes 17: ↑14 and ↓3 +11
Views 1.9K
Comments 9

Наследование конфигов в Zend_Config

Zend Framework *
Для тех, кому лень читать длинное предисловие: перемотайте до последней части «Простая идея, которая пришла мне в голову».
Я хотел поставить якорь, но хабрапарсер не разрешает :(

Zend_Config и секции


Официальная документация Zend Framework советует разделить конфигурационный файл на несколько секций, каждая из которых будет отвечать за разную среду, в которой должен работать проект.
При этом, одна секция конфига может наследовать другую, переопределяя только те параметры, которые должны быть изменены.

На первый взгляд, такая идея кажется разумной, но я столкнулся с некоторыми ограничениями этого подхода…
Читать дальше →
Total votes 28: ↑23 and ↓5 +18
Views 1.4K
Comments 21

Абсолютная загадка наследования в Java

Java *
Translation
Почему эта загадка абсолютная? По двум причинам:
• Она касается основ языка Java, а не какого-то малоизвестного нюанса API.
• Она расплавила мой мозг, когда я на нее наткнулся.
Если вы хотите проверить себя перед дальнейшим чтением, пройдите этот тест.
Читать дальше →
Total votes 56: ↑47 and ↓9 +38
Views 27K
Comments 46

Memento mori, %username%!

Lumber room
В старой песенке поётся:
После нас на этом свете
Пара факсов остаётся
И страничка в интернете…
(Виталий Калашников, bards.ru)

Сегодня мы поговорим о такой невесёлой стороне человеческого бытия, как уход человека из жизни. Само по себе трагичное, это событие порождает массу правовых последствий: от прекращения действия разного рода обязательств до передачи прав собственности на имущество, которым покойный обладал при жизни, его законным наследникам.

Казалось бы, вопросы наследования настолько тривиальны, и всё, с ними связанное, настолько скрупулёзно регламентировано действующим законодательством, что необходимость дискуссии на тему посмертной передачи прав может показаться весьма сомнительной. Но это лишь на первый взгляд.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 302
Comments 14

Попытка классификации и анализа существующих подходов к наследованию в Javascript

JavaScript *

Некоторое время назад у меня дошли руки до темы, которая давно уже меня нервирует интересует. Эта тема — наследование в JavaScript.

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

Хочу сразу сказать, что я не претендую на глубокое понимание ООП в JavaScript, и даже не претендую на глубокое понимание ООП вообще. Я буду рад, если моя попытка анализа окажется кому-нибудь полезной, но основная цель публикации, в некотором смысле, противоположная — мне бы хотелось самому воспользоваться замечаниями людей, которые лучше меня ориентируются в теме, чтобы прояснить ее для себя.
Читать дальше →
Total votes 55: ↑48 and ↓7 +41
Views 2.7K
Comments 44

Интересная работа сборщика мусора

Java *
Проблема
Явой занялся я недавно, и столкнулся с интересной проблемой связанной с динамическим переопределением методов во время исполнения. После выхода из переопределенного метода терялась ссылка на объект. Решение проблемы затянулось в связи с тем, что на одном компьютере она была, а на другом нет.
Листинг и мои мысли об источнике проблемы
Total votes 15: ↑9 and ↓6 +3
Views 2.1K
Comments 25

Иной — PHPTAL

PHP *
Для описания этого очень мощного и одновременно лаконичного шаблонизатора просто скопирую текст из мана
«PHPTAL is an implementation of the excellent Zope Page Template (ZPT) system for PHP. PHPTAL supports TAL, METAL, I18N namespaces» и «PHPTALES is the equivalent of TALES, the Template Attribute Language Expression Syntax. It defines how XML attribute values are handled»

Предлагается по LGPL лицензии тут http://phptal.org/.

Я делаю шаблоны на PHPTAL уже около года и считаю его «феерическим» :). В коде есть пара моих патчей, поэтому я знаю тему изнутри.

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

Читать дальше →
Total votes 15: ↑10 and ↓5 +5
Views 1.6K
Comments 39

«Наследование» не от классов

Python *
image
В Питоне совсем не важно, что вы поместите в определение класса. Это могут быть строки, числа, объекты, переменные. В третьем Питоне можно даже передавать именованные аргументы.
Реализация
Total votes 49: ↑45 and ↓4 +41
Views 3.5K
Comments 33

Принцип подстановки Барбары Лисков

Programming *
Привет, хабрачеловеки!

Захотелось вот поделиться сокровенным знанием по этой теме. К тому же материалов по этому, достаточно важному принципу проектирования классов и их наследования, в Рунете как-то негусто. Имеются формулировки вида:

«Пусть q(x) является свойством верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.» © Wikipedia

Но они выносят мой мозг меня совершенно не радуют.

Если хочется услышать объяснение этой хрени умной фразы — прошу под кат.
Читать дальше →
Total votes 85: ↑75 and ↓10 +65
Views 87K
Comments 55

Новые функции в репозитории фреймворка: ORM/ActiveRecord

LiveStreet
image
Я хотел бы начать серию статей о развитии движка LiveStreet, а именно его фреймворковой части. LiveStreet получил довольно широкую популярность как блогосоциальный хабраклон, но за 2 года перерос уже в нечто значительно большее. Особенно с выходом версии 0.4.*, когда появились широкие возможности для написания плагинов с функционалом наследования и делегирования.
Достаточно большое количество крупных социальных сетей уже построено на LiveStreet с использованием этих технологий.

В связи с этим у разработчиков появляется необходимость в разработке функционала, модулей и хаков для своих проектов. Внедрение плагинов упростило этот процесс в разы. Мы продолжаем работать в этом направлении: сейчас я расскажу об альфа-версии реализации ORM-подхода на основе паттерна ActiveRecord, который мы разработали (и продолжаем разрабатывать) в LiveStreet.

Читать дальше →
Total votes 52: ↑39 and ↓13 +26
Views 2.3K
Comments 51

Что не так с наследованием? Разработка флэш-игр с использованием фреймворка PushButton Engine

Adobe Flash
Sandbox
image
Существует не так много специализированных фреймворков, ускоряющих разработку флеш игр. Из тех что на слуху, можно отметить следующие:

Flixel
FlashPunk
Citrus Engine
PushButton Engine

Этим постом я хочу обратить внимание коллег-флешеров на перспективный опенсорсный движок под названием PushButton Engine. PBE уже успели представить на Adobe Max 2010 и разработать на нем #2 Top Facebook game 2010 по версии insidefacebook.com. Его используют для разработки игр такие компании как Zynga, Playdom, Hive7.

Разработчиками движка являются достаточно известные в геймдевелоперских кругах люди, создавшие такие игры как The Incredible Machines, Tribes, Torque и другие.

Предлагается любопытный компонентный подход к разработке, который, по заверениям авторов, гораздо удобнее и продуктивнее при разработке игр чем традиционный объектно-ориентированный.
Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Views 2K
Comments 30

Плагинизация классов

PHP *
Как-то медитируя на свой новый велосипед подумал, – А почему бы не заложить в него возможность «плагинизации» контроллеров?

Чтобы вот был, например, у нас некий базовый класс Generic.php:
<?php
class Generic
{
  public function Hello() {
    echo 'Hello!';
  }
}
?>


А мы такие взяли и повешали бы на него пару плагинов, которые дополнят/изменят какие-либо его методы не мешая друг-другу (по принципу «кто первый встал – того и тапки»).

Вот они красавцы:
PluginFoo.php:
<?php
class PluginFoo extends Generic_PluginFoo
{
  public function Hello() {
    echo 'Dudes?<br />';
    parent::Hello();
  }
}
?>

и PluginBar.php:
<?php
class PluginBar extends Generic_PluginBar
{
  public function Hello() {
    parent::Hello();
    echo '<br />O.o';
  }
}
?>


А потом мы создали бы объект родительского класса (не обращаясь к последнему потомку), вызвали метод Hello() и тот сказал бы нам:
Dudes?
Hello!
O.o


Ниже лаконичный вариант того как описанного поведения добился ort в своём LiveStreet, а затем уже и я в своём собственном велосипеде.
Читать дальше →
Total votes 107: ↑75 and ↓32 +43
Views 1.5K
Comments 28

Модульный подход в JavaScript

JavaScript *
Translation
Модульный подход довольно распространённая техника программирования в JavaScript. Обычно его понимают довольно хорошо, но продвинутые техники описаны недостаточно. В этой статье я рассмотрю основы и затрону некоторые сложные приёмы, включая один, по моему мнению, оригинальный.

Основы



Мы начнём с несложного обзора модульного подхода, хорошо известного с тех пор, как Эрик Миралья (Eric Miraglia) из YUI впервые об этом написал. Если вам уже знаком модульный подход, переходите сразу к «Продвинутым техникам».

Анонимные замыкания


Читать дальше →
Total votes 133: ↑121 and ↓12 +109
Views 45K
Comments 32

Замыкания и объекты JavaScript. Переизобретаем интерпретатор

JavaScript *Compilers *ООP *
Tutorial
Обычно концепции или парадигмы программирования объясняют либо описательно — «разжёвывая» новые идеи простыми словами, либо метафорически — уподобляя их хорошо знакомым аудитории предметам и понятиям. Но ни первый, ни второй способ не дает такого точного и полного представления о предмете, как взгляд с точки зрения низкоуровневой реализации.

Когда в изучении языка доходишь до нетривиальных вещей, бывает полезно сместить уровень абстракции, чтобы понять, как на самом деле всё устроено. Ведь, по большому счету, любые конструкции языков сколь угодно высокого уровня сводятся к старому доброму машинному коду. Писать в объектно-ориентированном или функциональном стиле можно и на чистом C, и даже на ассемблере. Грубо говоря, любой высокоуровневый язык — это зафиксированный на уровне компилятора или интерпретатора набор синтаксических карамелек и шоколадок. Повышение уровня абстракции позволяет писать более сложные программы с меньшими усилиями, но вот понять в начале пути, что конкретно имеется в виду под наследованием или замыканием, как это всё работает и почему, гораздо легче, разобравшись, каким образом всё это реализовано.

JavaScript, как никакой другой язык, нуждается в именно таком объяснении. Функциональная природа, скрытая за Си-подобным синтаксисом, и непривычная прототипная модель наследования поначалу сильно сбивают с толку. Давайте мысленно понизим уровень JavaScript до простого процедурного, наподобие Си. Отталкиваясь от этого «недоязыка», переизобретем функциональное и объектно-ориентированное программирование.
Читать дальше →
Total votes 114: ↑113 and ↓1 +112
Views 24K
Comments 30

Паттерн Наблюдатель: списки и матрёшки из слушателей

Programming *
В этой хабрастатье на примере паттернов Наблюдатель и Компоновщик рассмотрено, как применять принципы объектно-ориентированного программирования, когда стоит использовать композицию, а когда наследование. А так же рассмотрено, какие существуют способы повторного использования кода, кроме copy-paste.

Статья достаточно простая, в ней рассматриваются очевидные вещи, но надеюсь, что она будет интересна начинающим программистам, которые пока встречались со словами из первого абзаца только на лекциях по программированию. (На самом деле эта статья и есть кусочек практического занятия по программированию.)
Читать дальше →
Total votes 21: ↑19 and ↓2 +17
Views 20K
Comments 16