ООП в javascript. Алгоритмы построения приложений
Уже очень долго изучаю объектно-ориентированную методологию в построении приложений.
Понимаю плюсы от такого подхода и уже изучил не мало всяких статей на эту тему. Но применить практически свои знания не получается. В тех примерах, которые видел речь идет о примитивных задачах (кролик бежит, кролика накормили..), но на практике получается так, что помимо "кролика" есть еще много не взаимосвязанных сущностей( У меня есть готовое рабочее приложение. Его можно разделить на 3 части: 1) Функции отвечающие за drag-n-drop. 2) Функции на события нажатия кнопок 3) Функции, работающие с Storage. Само приложение простенькое: Пользователь перемещает элементы(1) и сохраняет текущие значения в Storage(3). Работает с текущими сохраненными данными(2). Как это сделать единым целым я понять не могу( Вот к примеру - взять jQuery. Там "кролик" - это элемент, jQuery манипулирует им. Все просто. Но что взять за основу в моем приложении? Или основ должно быть несколько, которые взаимодействуют между собой? Буду рад любым ссылкам и советам! |
Цитата:
function a(data){ this.data=data; ..... } a.prototype.b=function(data){ действия над this.data..... return this;} a.prototype.c=function(data){действия над this.data..... return this;} a.prototype.d=function(data){действия над this.data..... return this;} a.prototype.я=function(data){действия над this.data..... return какоето значение если метод должен чегото вернуть конкретное..} $=new a('elem'); $.d(data1).c(data2)..... |
|
dmitriymar,
ага... я что-то ступил.. |
ООП это ответ на высокую сложность приложений.
Вы неувидите потребности в ООП работая над jQuery плагином. Чтобы появилась необходимость решите такую задачу. Сделайте 3 плагина для отображения содержимого тега TABLE 1) GRID'ом, 2) плиткой 3) списком UL/LI Надо быть слепым чтобы не заметить уйму общих методов для всех 3х плагинов. Вот тут и появляется необходимость в ООП. определите все общие методы, и вынесите их в отдельный класс. напишите три плагина наследующих от базового класса, общие методы. Ещё раз повторю работая над одним плагином, необходимость в ооп возникнет едвали. Она чувствуется в крупных формах, вроде приложений из десятков компонентов, или комплексе/наборе Плагинов UPD в вашем примере невижу необходимости в наследовании и полиморфизме. Инкапсуляция, и абстракция - да. Тоесть я непонимаю зачем вам ООП, что в базовый класс выносить собрались ? |
Цитата:
|
Цитата:
Масимальномаксимальный уже не тот, с годами его становится понимать всё сложнее :D |
Цитата:
|
iMaxmaxmaximus,
10000110001 10001001011 10000111011 10000111110 10000110001 10001001011 10000111010 10000111110 10000111100 10001000011 10001000011 10001000111 10000111000 10001000010 10001001100 ) |
имхо, лучше сейчас начинать учить функциональщину, пока императивщина и ООП не проели мозг до конца.
да и сейчас всё чаще вижу (на том же хабре) статьи про функциональное программирование. я пока начал вникать (вникаю на JS, не на хаскеле), это очень трудно, но это совершенно другой мир - более логичный и простой. |
Цитата:
Могу сказать только одно -ооп совали где нужно и не нужно-типа это круто . всему своё место. некоторые задачи лучше решать функционально, некоторые ооп. ооп -построение интерфейсов,функционально там ну не в тему. но тоже, если не использовать наследование там -это ...как мин бред. |
да я бы тоже не стал заморачиваться с ооп, пока не прижмет. Но работодатели требуют его знание(.
да и функциональное программирование не особо то популярно. У Флэнагана все описание ФП уместилось на 3-х листочках. В "шаблонах" есть много интересного на эту тему (каррирование, мемоизация..), но все дано не как полноценная модель программирования а как дополнительные возможности использования языка( |
Цитата:
|
Цитата:
Цитата:
кстати, jQuery - это на 50% функциональщина:) |
Интересно как бы выглядел jquery полностью в функциональном стиле ?
ща нафантазирую :) //выберем все теги P var v=$("p"), //создадим функцию с устанавливающую css test=$css("opacity:0.5;left:100"); // всем P добавим пример мир $html( v ,"привет мир" ); //удалим все p.killme $remove( v(".killme") ); //скормим выборку функции "test" созданной заранее test(v); ну или как то так :D Прикольно правда ? :D :D :D |
Цитата:
Есть у меня подобная штука: var tuple = new Tuple; tuple.set('a', 0)(1, 2)('function', function(param) { alert(param); }); tuple.get('a'); // 0 tuple.get('function')(1); // 1 tuple.get(1); // 2 tuple.get(); // {a: 1, 'function': [ object Function ], 1: 2} |
Прототип функционально ориентиированного jquery :D
//конструктор обёрток для функций function wrapper(callback){ return function(param){ return function(){ return callback.apply(this,[Array.prototype.slice.call(arguments),param]) } } } //аналог $ в jquery function $(param){ var wrap=wrapper(function(arg,context){ if ( arg.length==0) return context; else if (typeof arg[0]=="function") { var w=wrap( context ); arg[0]( w ); return w; } else return wrap( context+arg[0] ); }) return wrap(param); } //скрываем элемент function $hide(o){ alert('скрыть '+ o() ); } //если указан только p1 и p1 не функция, то породит функцию // если p1 это функция а p2- строка style, тогда сработает сразу function $css(p1,p2){ var wrap=wrapper(function(arg,style){ alert("для элемента "+arg[0]()+" установить стили "+style); return wrap(style); }); if (p2) return wrap(p2)(p1); if (p1) return wrap(p1); } // эксперементы //выберем все дивы var sel1=$("div"); //из дивов выберем те у которых класс sel2 var sel2=sel1(".sel2"); $hide( sel1(".test1") ); //скроем div.test1 $hide( sel2(".test2") ); //скроем div.sel2.test1 //создадим функцию style из функции CSS var style1=$css(" opacity:0.5; left:200"); alert(" !!!!! применим несколько команд к выборке !!!!! "); sel2( style1 )( $css("left:1000px;") )($hide); alert(" !!!!! применим несколько выборок к команде !!!!! "); style1(sel2)( sel1 )( $(".hello") ) alert(" !!!!! скомбинируем оба подхода !!!!! "); sel1( style1( sel2(".t1") ) ( sel2(".t2") ) ); |
Цитата:
|
Часовой пояс GMT +3, время: 13:18. |