Имя: Пароль:
1C
 
Вопрос по ООП
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
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
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, то ты точно знаешь что какой-то Вася в каком-то левом модуле эти состояния не подменяет...чтобы все работало.
Основная теорема систематики: Новые системы плодят новые проблемы.