Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.07.2012, 18:49
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

ХВАТИТ ЭТО ТЕРПЕТЬ
Ответить с цитированием
  #12 (permalink)  
Старый 11.07.2012, 18:49
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

TO Drimogemon:
В вашем примере используется this, что делает свойства Cat'a public (они же теперь открыты всем объектам). PROTECTED похоже в Javascript совсем нет и вроде это не реализовать никак (возможно, я ошибаюсь).
Ответить с цитированием
  #13 (permalink)  
Старый 11.07.2012, 18:51
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

Так, видно придется пересылать копипаст сюда. http://javascript.ru/forum/184083-post1.html
Сообщение от Dmitry A. Soshnikov
Инкапсуляция

С этой идеей часто возникает путаница и ошибки в восприятии. В данном случае мы будем рассматривать один из удобных “сахаров” некоторых реализаций ООП, — всем известные модификаторы: private, protected и public, которые также называются уровнями (или модификаторами) доступа к характеристикам объектов.

Я хочу выделить и напомнить самый главный момент, касающийся сущности инкапсуляции: инкапсуляция — это усиление абстракции, но никак не параноидальное сокрытие от “злых хакеров”, которые “то и норовят, что-то записать напрямую в поля ваших классов”.

Это самая большая (и распространённая) ошибка — использовать сокрытие ради сокрытия.

Уровни же доступа — private, protected и public — были введены в ряде реализаций ООП исключительно для удобства самого программиста (и действительно, являются достаточно удобным “сахаром” — поэтому и были введены), чтобы более абстрактно представлять и описывать систему.

Наиболее хорошо, это можно видеть в некоторых реализациях (опять же, в тех же Python’e и Ruby). С одной стороны (в Python), это __private и _protected свойства (определяются именованием через ведущие подчёркивания) и не доступны снаружи. С другой стороны, Python просто переименовывает такие поля определённым образом (_ИмяКласса__имя_поля), и под этим именем они уже доступны снаружи.

Или в Ruby: с одной стороны, есть возможность определять private и protected характеристики, с другой стороны, так же есть ряд методов (например, instance_variable_get, instance_variable_set, send и т.д.), позволяющих получить доступ к инкапсулированным данным.

Основная причина: программист сам, сознательно хочет получить доступ к инкапсулированным (обратите внимание, я специально не использую термин “скрытым”) данным. А значит, если они будут как-то неверно изменены или будет какая-то ошибка, то в ответе за это полностью и осознанно программист, а не просто “опечатка” или “кто-то случайно изменил какое-то поле”. Однако в частых подобных случаях, всё-таки, есть смысл говорить о плохом стиле программирования.

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

Инкапсулирия вспомогательные (локальные) объекты, мы обеспечиваем возможность дальнейших изменений поведения public-интерфейса с минимумом затрат, локализуя и прогнозируя места этих изменений. И именно в этом заключается главная суть инкапсуляции.

Так же важной задачей сеттера является абстрагирование сложных вычислений. Например, сеттер element.innerHTML — мы просто абстрактно говорим — “теперь html этого элемента будет таким”, в то время, как внутри функции-сеттера для свойства innerHTML будут сложные вычисления и проверки. Здесь речь идёт об абстракции, но инкапсуляция, как усиление её — имеет место быть.

Само же понятие инкапсуляции может и не быть связано с ООП. Так, например, в качестве инкапсулирующей сущности может выступать и обычная функция, которая инкапсулирует в себе различные вычисления, делая использование её абстрактным (пользователю не важно знать, как реализована, к примеру, функция Math.round(…), он просто её вызывает). Это — есть инкапсуляция реализации и, обратите внимание, ни о каких private, protected, public в этом моменте речи не идёт.
Ответить с цитированием
  #14 (permalink)  
Старый 11.07.2012, 18:53
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от almac
В вашем примере используется this, что делает свойства Cat'a public (они же теперь открыты всем объектам). PROTECTED похоже в Javascript совсем нет и вроде это не реализовать никак (возможно, я ошибаюсь).
function Car(speed) 
 { 
 var a=10;
 this.getSpeed=function(){ return a};
 this.setSpeed=function(){ a=20};
}
var car = new Car(100);
alert(car.getSpeed())
car.setSpeed()
alert(car.getSpeed())
alert(car.a)
Ответить с цитированием
  #15 (permalink)  
Старый 11.07.2012, 18:53
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

almac,
то есть ты либо совсем не понимаешь че такое модификаторы доступа и зачем они нужны, либо притворяешься. если не понмиаешь то я могу обьяснить своими словами.
dmitriymar,
теперь сделай мне с этим дерьмом наследование?

п.с. вот сахарная обертка на ооп в javascript
https://github.com/Livanderiamarum/O...ster/README.md

Последний раз редактировалось Drimogemon, 11.07.2012 в 18:55.
Ответить с цитированием
  #16 (permalink)  
Старый 11.07.2012, 18:58
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Drimogemon
dmitriymar,
теперь сделай мне с этим дерьмом наследование?
да ты даун полный. Тудаже к чтению Стоянова Шаблоны Javascript.
Там всё это есть -в том где ты корчишь из себя умника а на самом деле тупишь не по детски. И если ты не читал эту книгу -то это только твоя проблема,но никак не моя.
ты -ТУПОРЕЗ ТРОЛЬ-ЭТО АКСИОМА
Ответить с цитированием
  #17 (permalink)  
Старый 11.07.2012, 19:00
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

Сообщение от Drimogemon
Инкапсулирия вспомогательные (локальные) объекты, мы обеспечиваем возможность дальнейших изменений поведения public-интерфейса с минимумом затрат, локализуя и прогнозируя места этих изменений. И именно в этом заключается главная суть инкапсуляции.
Вот тут! Все верно!
Само собой, если переменная только для чтения, то используем простой геттер, и просто НЕОБХОДИМО использовать "скрытие" переменной. Если же можно использовать и геттер, и сеттер, то тут вроде можно и не писать эти "лишние" методы get и set, но это правило хорошего тона.
Ответить с цитированием
  #18 (permalink)  
Старый 11.07.2012, 19:04
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

almac,
инкапсуляция в javascript достигается пространством имен _
и люди знают что если свойство начинается с _ то оно внутреннее.
обычно даже итерируют свойства так:

for ( key in obj ) if( key.indexOf('_') !== 0 ){

}

(если итератор не поедусмотрен интерфейсом обьекта конечно)

Конструкторы же объектов принято называть с Заглавной буквы. Javascript очень динамичный язык(хорошо это или нет), по этому в нем много возможностей и много договоренностей.



Сообщение от dmitriymar
да ты даун полный. Тудаже к чтению Стоянова Шаблоны Javascript.
Там всё это есть -в том где ты корчишь из себя умника а на самом деле тупишь не по детски. И если ты не читал эту книгу -то это только твоя проблема,но никак не моя.
ты -ТУПОРЕЗ ТРОЛЬ-ЭТО АКСИОМА
Я попросил сделать с этим говном наследование, а опять слышу кулстори за место аргументов.

Последний раз редактировалось Drimogemon, 11.07.2012 в 19:10.
Ответить с цитированием
  #19 (permalink)  
Старый 11.07.2012, 19:12
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Drimogemon
Я попросил сделать с этим говном наследование, а опять слышу кулстори за место аргументов.
Да какого я должен тебе чтото писать,если тебе в западло достать книжку и почитать самому?
Ответить с цитированием
  #20 (permalink)  
Старый 11.07.2012, 19:14
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

TO Drimogemon: ну и зачем вы так с людьми? не надо нас так люто ненавидеть... я про все ваши сообщения, которые не касаются javascript
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в javascript? Mахmахmахimus Общие вопросы Javascript 74 19.02.2012 00:54
public метод для плагина Ichigeki jQuery 1 16.02.2012 19:07
flash media server интересная все таки штука.... Sadist_dead Flash 4 07.12.2011 21:17
Firefox extension и internal public suffix list e1f Общие вопросы Javascript 1 18.11.2010 18:22
public переменные mikeles Элементы интерфейса 3 18.07.2010 03:00