Теперь я внесу ясность. Начнем с теории. Три основых принципа в ООП:
1. Инкапсуляция - в JS нету модификторов доступа. Все данные защищаютсья с помощю замиканий
CODE (
javascript):
скопировать код в буфер обмена
A = function() {
// private
var _property;
var _privateMethod = function() { /* actions */ } // скрытый метод
// public
this.getProperty = function() { // открытый интерфейс
return _property;
}
this.setProperty = function(value) { // открытый интерфейс
_property = value;
_privateMethod();
}
}
2. Наследование - также нет такого понятия. Делается новый обьект, который сливает два или более обьектов или с помощю прототипов(как я говрил прототипное програмирование)
CODE (
javascript):
скопировать код в буфер обмена
var Parent = function( data ) {
this.data = data || false;
this.public_method = function() { return 'Public Method'; }
}
var Child = function() {
this.public_method = function() { return 'Redefined public method'; }
this.getData = function() { return 'Data: ' + this.data; }
}
Child.prototype = new Parent('test');
var Test = new Child();
Test.getData(); // => "Data: test"
Test.public_method(); // => "Redefined public method"
Test.data; // => "test"
3. Полиморфизм - проверка instanceof.
Как видите все ето только емуляция. но никак чистый ООП. Или я не прав?
(Добавление)
nerv пишет:Может не будем разводить холивары, а просто скажите что мне почитать по теме? Как писал DeepVarvar "все равно каждый останется при своем мнении"
А я и не розвожу холивар. Мы же не тупо орем во вес голос свое мнение. Мы доводим свою точку зрения аргументировано. Значит у нас диалог. И мне очень интересно его окончить. А вдруг я не прав и Вы меня поправите.
теперь про wordpress. Сам делал плагин для него. Скажу чесно лучше codex-а инфы вы не найдете. В большинстве случаев статти расчитаны на новичков в програмирование и описивают простие примеры(правда нашел все таки несколько десатков интересных статтей)
Zuldek пишет:Или речь идет о цикле разработки CMS? Тогда ~PHP Кузнецов Симдянов... 2 издание - как раз разрабатывается простенькая CMS.
Сразу проглядел. Видимо, это то, что мне нужно. Спасибо!
caballero пишет:и ссылки на бредятину с педивикии
ну тогда иди азбуку почитай, если вики не угодила
(Добавление)
esterio пишет:Инкапсуляция - в JS нету модификторов доступа. Все данные защищаютсья с помощю замиканий
еще используют соглашения о наименовании
Я писал (пишу) на vb(a) и знаю, что такое private|public.
esterio пишет:Наследование - также нет такого понятия. Делается новый обьект, который сливает два или более обьектов или с помощю прототипов(как я говрил прототипное програмирование)
CODE (javascript):
Прототипное программирование не отменяет понятий ООП.
Вики гласит, что
Цитата:Прототипное программирование — стиль объектно-ориентированного программирования
esterio пишет:3. Полиморфизм - проверка instanceof.
Не понял, почему у вас понятие полиморфизма упирается в instanceof.
Цитата:[url=http://ru.wikipedia.org/wiki/Полиморфизм_(программирование)]Полиморфизм[/url] позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс.
Это обычная практика на js (и не только). Возьмите тот же jQuery UI и его интерфейс/класс Widget (один, общий для всех)
esterio пишет:Как видите все ето только емуляция. но никак чистый ООП. Или я не прав?
см. выше в этом посте "прототипное программирование - стиль ООП". На мой взгляд эти слова более чем красноречивы.
esterio пишет:А я и не розвожу холивар
Извините! Это, скорее, больше не вам было адресовано, а некоторым несдержанным отвечающим. Сам периодически такой, куда деваться
esterio пишет:теперь про wordpress. Сам делал плагин для него. Скажу чесно лучше codex-а инфы вы не найдете. В большинстве случаев статти расчитаны на новичков в програмирование и описивают простие примеры(правда нашел все таки несколько десатков интересных статтей)
Благодарю!
nerv пишет:Не понял, почему у вас понятие полиморфизма упирается в instanceof.
Ну представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод
show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).
П.С. педовикия не последняя инстанция знаний
(Добавление)
В догонку
Цитата:Объекты (они же - ассоциативные массивы, хэши) и работа с ними в Javascript - реализованы не так, как в большинстве языков. С этим связано много ошибок и непоняток.
В этой статье описаны базовые свойства объектов javascript, создание и изменение, перечисление свойств и т.п.
Объект в javascript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.
http://javascript[dot]ru/tutorial/object/intro - даному ресурсу я доверяю как-никак
esterio пишет:у представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).
в js, как вы отмечали выше, существует instanceof. Кроме того, в нем есть такое понятие как "утиная типизация".
по примеру: цикл по массиву, проверяем каждый элемент массива на то, что он объект, экземпляр необходимого нам конструктора, имеет метод show и если имеет вызываем его
esterio пишет:П.С. педовикия не последняя инстанция знаний
Согласен, но оскорблять ее зачем?
Если доверяете данному ресурсу, то вот ссылка на мой профиль
http://javascript[dot]ru/forum/members/17434-nerv_/
Еще: не понял к чему цитата с ресурса?
esterio пишет:А я о чем. Пример с того же ПХП
Я еще не дочитал до классов в PHP
, но вижу, из примера, что имеется класс Foo с методом (публичным) set.
Мой вопрос касательно
esterio пишет:Ну представте что у вас есть массив с 10 разных обьектов. Полиморфизм означает то, чо у них единый интерфейс и скажум есть метод show - так вот если будет хоть один оьект который не имеет даный интерфейс будет ошыбка. поетому нужно проверять. В том же ПХП можно просто указать возле параметра функции(см. Type Hinting).
что мешает сделать это
nerv пишет:по примеру: цикл по массиву, проверяем каждый элемент массива на то, что он объект, экземпляр необходимого нам конструктора, имеет метод show и если имеет вызываем его
в javascript? Когда я описывал алгоритм, я подразумевал, что он может быть реализован на js. Если вы считаете, что на js это не возможно, обоснуйте почему.
Я не считаю что ето не возможно. Я лиш веду до того что ето всего лиш емуляция. Я ничево против JS не имею. Он достаточно хорошый язык. Но его использование сводится к манипуляциям с DOM и стилями в большенстве случаев. Поетому ООП там совать думаю не стоит. А вот пользоватся замиканиями, его динамикой и прочими плюшками стоит. Но зачем там емуляция наследования которую делают я не понимаю. Тот же делегатор в соседней теме - я писал что для меня ето не делегатор, а просто обработчик собития. Думаю так реагирует каждый который знает другой ЯП. например прогер на JAVA будет орать во всю горлянку что динамическая типизация зло, что ПХП недо-язык и прочее. Моя же думка что каждому свое назначение: js - работа с DOM, ПХП - веб, Java, C++ - десктоп, asambler - драйвера, boot-загружчики(тоесть очень низкоуровные компоненты системы). И то что например в том же ассамблере нету ООП неозночает что он плохой, просто у него другая специализация.
(Добавление)
nerv пишет:в javascript? Когда я описывал алгоритм, я подразумевал, что он может быть реализован на js. Если вы считаете, что на js это не возможно, обоснуйте почему.
Да отвлекся от вопроса. Я привел пример кода ПХП где не нужно делаь вручную проверку типа обьекта. За Вас ето сделает ПХП. Вот и все.
esterio пишет:Я лиш веду до того что ето всего лиш емуляция
1. это элементарно реализуется на JS: внутри метода set проверяем приходящий объект на соответствие экземпляра классу и бросаем исключение / генерируем сообщение об ошибке
2. что еще интересней, не исключено, что это будет реализовано в ecmascript 6 (следующем стандарте языка). По крайней мере все к этому идет
В современном js существует еще такой метод
возвращает прототип объекта
Вообще, в современном js существует много чего интересного, начиная со "строго режима" (который, кстати, всем настоятельно рекомендую использовать). Обо многом написано здесь
http://learn[dot]javascript[dot]ru/descr[dot][dot][dot]-getters-setters
esterio пишет:Я ничево против JS не имею. Он достаточно хорошый язык. Но его использование сводится к манипуляциям с DOM и стилями в большенстве случаев. Поетому ООП там совать думаю не стоит.
На сегодняшний день ситуация такова, что большинство сложных и средней сложности приложений на клиенте пишутся с применением ООП. Более того, если вы пишите простое приложение и в последствии захотите его расширить / сделать расширяемым, вы
обязаны применять ООП. Это раз.
Два: существует серверный javascript - node.js. Уже достаточно много сервисов его использут, в т.ч. ВК и Яндекс.Почта.
esterio пишет: Но зачем там емуляция наследования которую делают я не понимаю.
Если вы чего-то не понимаете, это еще не значит, что оно не надо
Другое дело, что на js надо писать опираясь на прототипы, а не на классы (в противном случае - мама дорогая).
esterio пишет:Моя же думка что каждому свое назначение
Зависит от умения и фантазии разработчика
UPD не знаю, что вы имели ввиду под "делегатором" (прокси/посредник?), но, как я обозначил в соответствующей теме, существует понятие "делегирование событий".
Оберну в офф: Я вам хочу напомнить, а те кто не знал, сказать, что сам я являюсь ярым противником засиранья мозгов парадигмой ООП. Но это не значит, что я его не использую. Я его использую только там, где без него никак не обойтись. Кто видел мой код в больших объемах/проектах - знает.
armancho7777777
Раз уж эта тема превратилась в обсуждение всего понемногу, продолжу в том же ключе
armancho7777777 пишет:Наиболее точная имитация наследования:
судя по коду, метод
должен находиться в прототипе функции конструктора. В этом случае он не будет создаваться отдельно для каждого объекта, а будет общим для всех.
как вариант без конструкторов
CODE (
javascript):
скопировать код в буфер обмена
var obj = {
method: function() {
return this.x * 2;
}
};
var some = Object.create( obj );
some.x = 2;
some.method2 = function() {
return this.method() << 1;
};
alert( some.method2() );
nerv пишет:кстати, знаешь, как работает?
Знаю. Могу не так глубоко знать, но знаю.
Хотя typeof s вернет уже object а не string, как в первом примере.
(Добавление)
Таки нет, именно маленькая.