![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 22
|
Сразу пример:
public class Example { private var variable:int; public function Example(variableArg:int) { variable = variableArg; } public function traceVariables(exampleArg:Example):void { trace(this.variable, exampleArg.variable); //выводит 1 2 exampleArg.variable++; trace(this.variable, exampleArg.variable); //выводит 1 3 } } public class Main extends Sprite { public function Main() { var exampleA:Example = new Example(1); var exampleB:Example = new Example(2); exampleA.traceVariables(exampleB); } } P.S. Подобное также допустимо во всех мейнстримных языках |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Вот и весь заговор.
Добавлено через 2 минуты Проверьте в самом инстенсе exampleB... |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 22
|
Gerbert, т.е. ваш код AVM интерпретирует как эквивалентный моему?
|
|
|||||
|
А как на счет немножечко вот такого:
Делаем класс с приватным свойством _prop. Ну и учим его выводить приватное свойство другого экземпляра такого же класса package { public class A { private var _prop:int = 0; public function A() { super(); } public function logOtherA(a:A):void { trace(a._prop); } } } package { public class B extends A { private var _prop:int = 1; public function B() { super(); } } } package { import flash.display.Sprite; public class Main extends Sprite { public function Main() { super(); var a:A = new A(); var b:B = new B(); a.logOtherA(a); // 0 a.logOtherA(b); // 0 b.logOtherA(b); // 0 b.logOtherA(a); // 0 } } } Что до приватных-для-данного-объекта полей, то, если честно, я теряюсь - зачем это может пригодиться?
__________________
...вселенская грусть Последний раз редактировалось gloomyBrain; 21.08.2014 в 19:48. |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Цитата:
У меня нет возможности проверить, но если Вам не сложно, то - public class Example { private var variable:int; public function Example(variableArg:int) { variable = variableArg; } public function traceVariables(exampleArg:Example):void { trace(this.variable, exampleArg.variable); //выводит 1 2 exampleArg.variable++; trace(this.variable, exampleArg.variable); //выводит 1 3 } public function report():int { return this.variable; } } |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 22
|
gloomyBrain, спасибо за хороший пример, годится для лучшего понимания. Я почему-то всегда ассоциировал private как разрешенный только для данного конкретного инстанса, не знаю с чего это я взял. С точки зрения принципов ООП все же считаю, что private в рамках класса все же хуже чем в рамках инстансов, т.к. должны быть внутренние переменные, предназначенные только для внутреннего пользования. private в рамках класса позволяет объектам нарушить внутренне состояние других объектов, пусть даже одного и того же класса. С другой стороны, тот кто разрабатывает класс и добавляет в него обращение к приватам объектов того же класса сам же допускает подобное нарушение целостности для объектов своего же класса. Т.е. приватная переменная и код обращающийся к ней посредством другого однотипного объекта находятся в одном и том же классе и им ограничены, исходя из этого можно предположить, что такие обращения не будут нарушением инкапсуляции. Ну это мысли в слух, наверное я слишком загоняюсь
![]() Gerbert, |
|
|||||
|
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Фигня какая-то... Ведь так не должно быть, у экземпляра по ссылке exampleArg нет свойства variable...
Как вот такая exampleArg.variable++; запись может пройти?) |
|
|||||
|
Lorem ipsum
|
Всегда считал, что приватность реализована на уровне экземпляра, а не на уровне класса. Но когда я узнал, что это не так, я, скорее, обрадовался — мне нужно было умножать текущую матрицу на другую матрицу. Вот уж где можно было без пабликов или геттеров/сеттеров лазить по приватным полям матрицы-аргумента!
__________________
Поймай яблоко 2! |
|
|||||
|
.
|
Мне тоже нужно лазить в матрицах!!! Как ты лазил? ))
Добавлено через 5 минут В детстве, изучая чей-то код, я встретил метод clone(), в котором без всяких зазрений совести и наплевав на инкапсуляцию объект писал в приваты другому объекту. Для меня это выглядело очень интимно xD. |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
dimarik, так свои матрицу написал и лазал в ней
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|