|
Вопрос по ООП | ☑ | ||
---|---|---|---|---|
0
rotting
28.02.15
✎
01:12
|
Начал я изучать Java. Прошу у гуру объяснить мне в чем сакральный смысл слов public и private? Зачем скрывать доступность переменных и методов из других классов? Только лишь чтоб программист сам ничего не напартачил, так в таком случае просто надо быть внимательней, чего я не знаю?
|
|||
1
Naumov
28.02.15
✎
01:15
|
и для этих вопросов ты выбрал форум посвященный 1С?
|
|||
2
sanja26
28.02.15
✎
01:17
|
(0) это что-то вроде полнотекстового поиска в 1с или других вшитых в платформу механизмах.
Ты можешь создать свои, но типовые останутся все-равно. |
|||
3
rotting
28.02.15
✎
01:18
|
(1) в 1С тоже есть что-то подобное, например нельзя зменить свойства каких-то объектов напрямую (типа "поле объекта не доступно для записи"), нужо использовать метод установки данного значения. Вот и интересно почему так сделано
|
|||
4
BAPBAP
28.02.15
✎
01:31
|
Если программист будет использовать только один метод твоего класса, зачем ему видеть другие 10 методов, которые идут как вспомогательные для одного public метода?
Когда ты в 1С набираешь Запрс.Выполнить() тебя сильно интересует, какие функции вызываются внутри платформы? |
|||
5
tridog
28.02.15
✎
02:28
|
(0) Молодец. Теперь прекрати изучать Java. Накой она тебе?
|
|||
6
Garykom
гуру
28.02.15
✎
02:36
|
(1) очень правильно выбрал форум, ведь все прекрасно знают что например как пропатчить кде2 под фрибсд без проблем объяснят на irc канале по аниме...
(0) чтобы платформа тебе помогала в написании, все нужные внешние методы и свойства-переменные объектов заранее помечены как public т.е. доступные для других иначе помер бы выбирать нужный метод из дофига наваянных разработчиком класса ЗЫ private методы кстати никто не запрещает вызывать, как и получать их список... |
|||
7
tridog
28.02.15
✎
02:52
|
(6) SecurityManager вполне себе мешает, если настроен соответствующим образом
|
|||
8
Garykom
гуру
28.02.15
✎
03:04
|
(7) угу, но никогда такой целью не задавался его включать в своих классах или пытаться выключать в чужих, потому что исходники обычно есть
|
|||
9
iamnub
28.02.15
✎
03:51
|
(0)
1С-ник пишет для юзеров. Программисты пишут для других программистов. Исходи из этого. |
|||
10
dsank
28.02.15
✎
05:25
|
(0)
Одна из причин это безопасность. Например, по правилам твоего класса определенное поле не должно быть нулевым, и когда ты присваиваешь значение этого поля через метод, то соответственно делаешь на это проверку. А если на прямую присвоить нулевое значение, то неизвестно как поведет себя программа. |
|||
11
megabax
28.02.15
✎
09:08
|
(0) Каким бы внимательным не был программист, человеческий фактор всегда существует. Ошибаются даже супер пупер специ. Так что если введение каких то дополнительных фишек, которые позволят еще сильнее минимизировать ошибки - это всегда плюс, при условии, конечно, что это не вызывает неприятных побочных эффектов. Но дело даже не в этом. Допусти, ты пишешь библиотеку, которую будут юзать сторонние программисты. И по какой то причини ты не хочешь, что бы они напрямую работали с полями, только через методы, которые работают с полями ПО ТВОИМ ПРАВИЛАМ. Вот тут то тебе и пригодиться private.
|
|||
12
Ненавижу 1С
гуру
28.02.15
✎
09:10
|
https://ru.wikipedia.org/wiki/Инкапсуляция_(программирование)
и еще там есть protected |
|||
13
Ненавижу 1С
гуру
28.02.15
✎
09:11
|
(1) в 1С есть "Экспорт"
|
|||
14
Torquader
28.02.15
✎
11:14
|
Private позволяет сделать методы и свойства, доступные только из методов самого объекта.
Таким образом, программист может спрятать реализацию класса не позволит "пользователям" лазить внутрь реализации. Собственно говоря, класс описывается как "чёрный ящик", то есть "пользователи" класса видят только методы и свойства, доступные наружу - они же и описываются в документации. Если мы сделаем все свойства доступными, то могут быть проблемы при наследовании, когда один класс описывается на основе другого. |
|||
15
ShoGUN
28.02.15
✎
11:21
|
(0) Помимо уже сказанного - private у полей позволяет делать из них свойства, т.е. не получать и устанавливать значения напрямую, а вместо этого вызывать обработчики(геттеры/сеттеры).
|
|||
16
Ненавижу 1С
гуру
28.02.15
✎
11:23
|
(15) свойства это только верхушка айсберга и синтаксический сахар в шарпе
|
|||
17
ShoGUN
28.02.15
✎
11:25
|
(16) Я в курсе :) Просто в 1С нет концепции геттеров/сеттеров на уровне встроенного языка, (0) может быть непривычно. А так-то мне всё понятно, и с private, и с public и с protected, я и на шарпе, и на жабе писал.
|
|||
18
Torquader
28.02.15
✎
11:26
|
(15) Это можно и без private делать.
Просто private гарантирует, что никто не запишет в эти поля значение напрямую, и можно лишний раз не проверять значение на валидность. |
|||
19
ShoGUN
28.02.15
✎
11:27
|
(18) Можно, но не нужно.
|
|||
20
Ненавижу 1С
гуру
28.02.15
✎
11:27
|
(17) их и в джаве нет
|
|||
21
Torquader
28.02.15
✎
11:31
|
(20) Они в COM-объектах есть, так что будут работать в любом языке, на котором написан COM-объект.
Правда, в идеологии COM-объекта, установка свойства - это вызов метода с одним параметром. |
|||
22
ShoGUN
28.02.15
✎
11:32
|
(20) Нет синтаксического сахара, а сама концепция - есть.
|
|||
23
Ненавижу 1С
гуру
28.02.15
✎
11:38
|
(21) COM это Windows, Java не Windows
(22) тогда она есть и в С++ |
|||
24
Torquader
28.02.15
✎
11:40
|
(23) Java хороша своей многопоточностью.
В остальном, она не очень-то и хороша. |
|||
25
Ненавижу 1С
гуру
28.02.15
✎
11:42
|
(24) ты сваливаешь тему
|
|||
26
Asmody
28.02.15
✎
11:42
|
Начать можно отсюда https://ru.wikipedia.org/wiki/Инкапсуляция_(программирование)
|
|||
27
Ненавижу 1С
гуру
28.02.15
✎
11:43
|
(26) даже ссылку из (12) дать не можешь, разработчик сайта, стыдно ))
|
|||
28
Asmody
28.02.15
✎
11:44
|
Ах ты, скобки.. https://ru.m.wikipedia.org/wiki/</a>Инкапсуляция_(программирование">)
|
|||
29
ShoGUN
28.02.15
✎
11:44
|
(23) И в С++ есть. А в 1С нет, поскольку нет модификаторов видимости, и методы такого рода не имеют смысла. Есть правда экспортные/не экспортные переменные модуля, но это и всё. Реквизит документа, например, можно модифицировать напрямую.
|
|||
30
ShoGUN
28.02.15
✎
11:44
|
(28) Битая :)))
|
|||
31
Asmody
28.02.15
✎
11:45
|
(27) там тоже ссылка неправильная. Сакральные скобки
|
|||
32
Asmody
28.02.15
✎
11:46
|
||||
33
Asmody
28.02.15
✎
11:46
|
О как!
|
|||
34
Torquader
28.02.15
✎
12:05
|
(31) Плохому танцору, как известно, много чего мешает.
|
|||
35
Karav
28.02.15
✎
12:59
|
(0) У меня была в практике случай. Чтоб при проведении одного документа, она писал движения в другой документ. А потом я долго искал как же так получается что проводки документа не соответствуют логике модуля проведения. Долго искал.
Вот для этого нужен private. Чтобы логика работы класса описывалась внутри этого класса и не изменялась извне. Если внутренее состояние класса private, то ты точно знаешь что какой-то Вася в каком-то левом модуле эти состояния не подменяет...чтобы все работало. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |