Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Важно: ООП ООП и еще раз ООП (https://javascript.ru/forum/misc/55210-vazhno-oop-oop-i-eshhe-raz-oop.html)

theKingOfJava 17.04.2015 22:59

Важно: ООП ООП и еще раз ООП
 
Ящетаю, на этом форуме недостаточно внимания уделяется наиболее сильной стороне жаваскрипта -- ООП. Решил попытаться восполнить этот недостаток.

Предлагаю постить тут задачи по ООП и решения. Можно решение выложить сразу, дабы потом кто-нибудь попытался его улучшить, а можно, типа, заинтриговать, выложить только задание, пусть другие ищут решения. Можно выкладывать, для сравнения, решения на других языках.

Основное условие -- чтобы задача не предполагала знания каких-либо специализированных вещей. Она должна быть заточена, преимущественно, на реализацию логики, объектной системы, взаимодействие между компонентами логики приложения, мб, паттерны проектирования и тп.

Для затравки предлагаю банальщину -- классическую реализацию банковского аккаунта. Дальше будем прикручивать расширения и фичи к ней. Но можете предложить и что-то свое.

ЗЫ Очень надеюсь что тема взлетит. Убожество тем которые в последнее время тут, преимущественно, фигурируют, в стиле "как скрыть див по ай ди а потом его показать..." вгоняют в глубокий сон, сцука. Задвиньте уже, наконец, что-то интересное.

alex.vv 18.04.2015 02:36

Цитата:

Решил попытаться восполнить этот недостаток.
Извини, но не увидел, в каком месте твоего сообщения ты "восполняешь" этот самый недостаток. Напиши реализацию, предложи варианты. А так - вилами по воде.

Цитата:

Для затравки предлагаю банальщину -- классическую реализацию банковского аккаунта.
И... зачем? (и где реализация?)

theKingOfJava 18.04.2015 03:02

Цитата:

Сообщение от alex.vv
и где реализация?

Все ждал, что кто нибудь проснется.

Ладно, вот простейшая реализация:
Account={
 balance: 0,
 create: function(){return Object.create(this)},
 withdraw: function(amount){if((this.balance-amount)<0) return console.log("out of limit!"); this.balance-=amount},
 deposit: function(amount){this.balance+=amount},
 check: function(){console.log(this.balance)}
}

////////example//////////////////

account=Account.create()
with(account){
 deposit(100)  
 check()       //>>>> 100
 withdraw(50)  
 check()       //>>>> 50
 withdraw(70)  //>>>> out of limit!
 check()       //>>>> 50
}

vuler 18.04.2015 12:38

Цитата:

наиболее сильной стороне жаваскрипта -- ООП
Эмм.тут не соглашусь вообще. JS - это чистое ООП. Не уделяют ему внимание, только те кто только начал изучать JS. Остальные просто не могут без него обойтись.
Я когда пишу приложение - у меня есть один класс материнка (app) при его создании он создает кучу других классов, которые устанавливают свои события(работа с каталогами, деревьям, всплывающими окнами и т.д.) и во все эти классы он сам себя передает. В результат из любого места кода можно получить полный доступ к любому элементу, не используя глобальную область видимости, достаточно написать this.app....и т.д.

vasa_c 18.04.2015 23:06

Цитата:

В результат из любого места кода можно получить полный доступ к любому элементу, не используя глобальную область видимости, достаточно написать this.app...
Чем это принципиально отличается от глобальной области видимости?

alex.vv 09.10.2015 22:31

Цитата:

Сообщение от vasa_c (Сообщение 367352)
Чем это принципиально отличается от глобальной области видимости?

Думаю тем, что можно построить именованную иерархию и управлять вложенными объектами через родительский объект, т.е. он будет чем-то типа контроллера. Обращение через this.app.something кстати напоминает систему пакетов в Java.
Но конечно проблему ограничения доступа это не решает, скорее решает конфликты имен и упрощает структуру приложения.


Часовой пояс GMT +3, время: 02:25.