Имя: Пароль:
LIFE
 
OFF: Зачем ООП в 1С?
, ,
0 Omskdizel
 
02.08.12
07:55
Бродя по разным веточкам нашего славного форума, регулярно натыкаюсь на фразы о том, что надо бы ООП прикрутить к 1С. Долго думал, воскуривал фимиам и так и не допер, зачем он надо? Не так давно на Хабре проскочила очень занятная статья на эту тему (http://habrahabr.ru/post/147927/).
С автором статьи я по большей части солидарен, особенно если прикладывать к 1С, посему вопрос: Ребята, которые хотят ООП в 1С, можете примерно рассказать, для каких задач он надо вам?
1 ДенисЧ
 
02.08.12
07:59
Автор статьи не осилил ООП и теперь поливает вторпродуктом всё, что нажито непосильным путём...

Чтобы понять, что это такое и занафея, читаем Страуструпа и Мейера...
2 KRV
 
02.08.12
08:01
(0) разбавленный фимиам попался, не забористый...
3 Omskdizel
 
02.08.12
08:04
(1) Ну читая автора, у меня сложилось впечатление, что он вполне себе нормальный прог и понимает о чем пишет. Да и поливать ему резона нет, просто слишком уж много разночтений и разных реализаций одних и тех же сущностей и процессов ООП. Вопрос потому у меня и появился, при таких раскладах оно нам надо?
4 Patrio_
O_Muerte
 
02.08.12
08:14
Блож*к, через о или через ё пишется?
5 izekia
 
02.08.12
08:15
После вот этой фразы перестал читать:
"Более того, объектно-ориентированные языки сами зачастую нарушают правило инкапсуляции, предоставляя доступ к данным через специальные методы — getters и setters в Java, properties в C# и т.д."
6 oleg_km
 
02.08.12
08:18
(3) Да очень просто. Хочу например немного изменить поле ввода даты, чтобы при выборе даты праздничного дня оно было красным, чтобы при выборе открывался мой календарь с указанием праздничных дней. Как сейчас: в общем модуле написал процедуры, изменяющие цвет, вызывающие форму выбора, а затем в каждом контроле китайским методом копипаст должен в разных обработчиках проставить вызов этих функций. Как делал например на фокспре: на базе встроенного контрола поле ввода сделал свой контрол, в котором переопределил нужные обработчики, добавил нужные свойства и просто теперь в нужные формы вставляю уже свой контрол. Что непонятного.
7 izekia
 
02.08.12
08:20
(0) 1. самый тупой пример - тестирование, мне нужно экспортировать все методы объекта которые я хочу протестировать
2. Еще более тупой пример, ДокументСАвтором => Документ
Я один раз пишу функциональность а потом наследую ее и мне не нужно думать о каких-то общих методах и как мне их вызывать
8 Zero on a dice
 
02.08.12
08:22
с документом плохой пример - это шаблоны
9 izekia
 
02.08.12
08:29
(8) какие еще шаблоны? не надо мыслить шаблонами)
10 Omskdizel
 
02.08.12
08:31
(6) Честно говоря сомневаюсь, что будет доступ к форме выбора даты, это таки не документ и не справочник. Просто потому, что в данный объект мы никак не вмешиваемся в принципе и выводить на прикладной уровень отрисовку это скажем так некоторый геморр.
(7) 1. Несколько не вкурил, что и куда ты собрался экспортировать?
2. Чем тебя ОбщиеРеквизиты не устраивают? Да и узковато, схожих по функционалу документов очень уж мало.
11 izekia
 
02.08.12
08:34
(10) причем здесь общие реквизиты?
ты просто не зная темы пытаешь порассуждать об этом поэтому и не догоняешь то о чем тебе пишут
12 Omskdizel
 
02.08.12
08:35
(11) Ну дак поясни, чего же такого я не знаю :) А то может это ты сам хочешь сам не знаешь что? :)
13 Красный рассвет
 
02.08.12
08:36
(6) (7) Мое мнение - если бы 1С шла на поводу у программистов, она давно бы разорилась.
Усложнение среды разработки приведет к падению эффективности проектов и появлению еще более диких нетленок и беспричинно измененных типовых.
14 Zero on a dice
 
02.08.12
08:38
(9) то, что вы описали в пункте 2 - механизм использования шаблонов
один раз делаете шаблон - далее используете его
прямого такого механизма, конечно, нет, но оставить в конфе документ "ШаблонДокумента" и копировать его - никто не запрещает, при этом все формы будут заранее отрисованы, и все нужные методы заранее описаны.
кстати, я еще не смотрел 8.3, но вроде как там есть возможность выгружать и загружать отдельные объекты конфигурации в xml - для шаблонов должно подойти

(13) все верно, но, как ни странно, все к тому и идет)
15 Omskdizel
 
02.08.12
08:38
(13) Кстати да, это еще одна причина. Вспомнил как тут проклинали тот же Рарус, как сейчас разгребаю завалы реализации одной из отраслевых конфигураций от партнера 1С...
16 Красный рассвет
 
02.08.12
08:39
(14) Не сцы :). Я давно поверил в Нуралиева, и пока не жалею
17 Кирпич2
 
02.08.12
08:40
(0) Так никто и не говорит что в 1с нужно ООП. Про ООП в 1с только студенты недоученные вроде говорили, а так больше и никто.
18 Infsams654
 
02.08.12
08:41
1сники зарабатывают в основном на допиливании конфигурации или создании новой на основе другой. Нужно изменить поведение и свойства какого-то объекта - либо курочится объект, либо создается новый агрегирующий старый.
При ООП - делается наследник, в нем добавляются(изменяются) методы и свойства предка, при чем из наследника доступны методы и свойства предка.
19 Ненавижу 1С
 
гуру
02.08.12
08:42
как всегда показываю как это в 1С без ООП, а это вот так:


Если ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАванс
           ИЛИ ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаАвансКомитента
           ИЛИ ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаСуммовуюРазницу Тогда
           ДанныеДляПечати    = СобратьДанныеСФнаАвансИСуммовуюРазницу(ТекущееОснование);
       ИначеЕсли ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НалоговыйАгент Тогда
           ДанныеДляПечати    = СобратьДанныеСФНалоговыйАгент(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ОтчетКомитентуОПродажах") Тогда
           ДанныеДляПечати    = СобратьДанныеПоОтчетКомитентуОПродажах(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
           ДанныеДляПечати    = СобратьДанныеПоРеализацияТоваровУслуг(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.РеализацияОтгруженныхТоваров") И ТипЗнч(ТекущееОснование.ДокументОтгрузки) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
           ДанныеДляПечати    = СобратьДанныеПоРеализацияТоваровУслуг(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.РеализацияОтгруженныхТоваров") И ТипЗнч(ТекущееОснование.ДокументОтгрузки) = Тип("ДокументСсылка.ПередачаОС") Тогда
           ДанныеДляПечати    = СобратьДанныеПоПередачеОС(ТекущееОснование.ДокументОтгрузки);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ВозвратТоваровПоставщику") Тогда
           ДанныеДляПечати    = СобратьДанныеПоВозвратТоваровПоставщику(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ОтчетКомиссионераОПродажах") Тогда
           ДанныеДляПечати    = СобратьДанныеПоОтчетКомиссионераОПродажах(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда
           ДанныеДляПечати    = СобратьДанныеПоАкту(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ПередачаОС") Тогда
           ДанныеДляПечати    = СобратьДанныеПоПередачеОС(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ПередачаНМА") Тогда
           ДанныеДляПечати    = СобратьДанныеПоПередачеНМАОрганизаций(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ОтражениеНачисленияНДС") Тогда
           ДанныеДляПечати    = СобратьДанныеПоОтражениеНачисленияНДС(ТекущееОснование);        
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.РеализацияУслугПоПереработке") Тогда
           ДанныеДляПечати    = СобратьДанныеПоРеализацияУслугПоПереработке(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.НачислениеНДСпоСМРхозспособом") Тогда
           ДанныеДляПечати    = СобратьДанныеПоНачислениеНДСпоСМРхозспособом(ТекущееОснование);
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.ОказаниеУслуг") Тогда
           ДанныеДляПечати    = СобратьДанныеПоОказаниюУслуг(ТекущееОснование, "Контрагенты");
       ИначеЕсли ТипОснования = Тип("ДокументСсылка.КорректировкаРеализации") Тогда
           ДанныеДляПечати = ПолучитьДанныеДляПечатиИсправленияСчетаФактуры(ТекущееОснование);
       КонецЕсли;
20 Лефмихалыч
 
02.08.12
08:43
Не нужно одинэсникам ООП - они и со структурным-то программированием разобраться не могут.
Одинэсники в массе своей, поскольку профильного образования в россии нет, - кустари да ремесленники, а таким технологии даже каленым железом не привьешь.
21 Лефмихалыч
 
02.08.12
08:44
(19) хороший пример, зачет
22 Omskdizel
 
02.08.12
08:45
(18) Ну и как думаешь это реализуется в базе? То же самое допиливание. Те же самые добаленные поля в БД.
(19) Честно признаться такие конструкции встречал как правило в гораздо меньшем размере и в очень маленьких количествах.
23 Ненавижу 1С
 
гуру
02.08.12
08:47
+(19) причем полиморфизм в 1С никто не отменял, но... разработчики не знают про него
(22) а это типовая
24 Flyd-s
 
02.08.12
08:49
(19), осталось только показать как это будет с ООП
25 Ненавижу 1С
 
гуру
02.08.12
08:50
(24) показываю:

ТекущееОснование.СобратьДанныеДляСчетФактуры();

ну и пара там ветвлений отдельных
26 Flyd-s
 
02.08.12
08:52
(25), что мешает написать функцию

СобратьДанныеДляСчетФактуры(ТекущееОснование)?
27 godmod80
 
02.08.12
08:53
(0) - не забивай голову, тема баян ваще, 1С упрощенная ООП, система разработки профильная, тока свои классы объектов нельзя создавать
28 iceman2112
 
02.08.12
08:54
упрощенная ООП?)
29 orefkov
 
02.08.12
08:56
(14)
Это называется не "шаблоны", а "китайский копи-паст", не надо тут технологии путать.
30 iceman2112
 
02.08.12
08:57
наврятли в 1с будет хоть когда нибудь ООП, это хлеб и соль добавлять кое-что менять по сто раз, обновления, разработка. Этим зарабывают 1сники, если будет ОПП, работы уменьшится, код станет более прозрачным, 1с программист станет более квалифицированным.
Вот тебе и ответ зачем ООП в 1с.
31 orefkov
 
02.08.12
08:58
(26)
Мешает то, что этот здоровый блок Если ИначеЕсли просто перенесется в ту функцию.
А вот с ООП этого бы комка спагетти-по-флотски просто не было бы. Но дети, вскормленные дикими 1Сниками, даже не представляют, что так может быть.
32 Omskdizel
 
02.08.12
09:02
(31) Зачем?? У каждого типа документа просто делаем такую функцию. И не надо ветвлений. Полиморфизьмь в действии.
(30) "если будет ОПП, работы уменьшится, код станет более прозрачным, 1с программист станет более квалифицированным" отличная шутка. Позволь процитирую тебе кусочек статьи, на которую ссылка есть в топике, раз уж ты ее не стал читать:

"Я не умею писать эффективные программы. Эффективные программы используют мало памяти — иначе сборщик мусора будет постоянно тормозить выполнение. Но чтобы совершить простейшую операцию в объектно-ориентированных языках приходится создавать дюжину объектов. Чтобы сделать один HTTP запрос мне нужно создать объект типа URL, затем объект типа HttpConnection, затем объект типа Request… ну, вы поняли. В процедурном программировании я бы просто вызвал несколько процедур, передав им созданную на стеке структуру. Скорее всего, в памяти был бы создан всего один объект — для хранения результата. В ООП мне приходится засорять память постоянно."
33 Ненавижу 1С
 
гуру
02.08.12
09:04
(32) полиморфизм в (25) ))
34 Zero on a dice
 
02.08.12
09:04
(29) я не говорю, о том, что в 1с есть механизм шаблонов, я говорю о том, что пример в (7) под номером 2 - не ООП
согласны?

(30) действительно, отличная шутка
35 iceman2112
 
02.08.12
09:05
(32) это вы к чему?
36 Sserj
 
02.08.12
09:07
(32) Дрянь полная эта выдержка, причем тут ООП если так хочется можно было все эти объекты реализовать функциями в своем классе. Просто человеку лень делать свое он использует готовые библиотеки и еще жалуется на них.
37 SachoZ
 
02.08.12
09:07
(0) С хрена ли такие разговоры? В 1С ООП реализовано настолько на сколько это выгодно Нуралиеву.
38 SachoZ
 
02.08.12
09:09
+(37) я бы даже сказать "так как это выгодно Нуралиеву"
39 Vovan1975
 
02.08.12
09:13
(31) в ООП это спагетти обросло бы кодами конструкторов и деструкторов классов и превратилось бы в еще больший кусок гна...
40 iceman2112
 
02.08.12
09:14
вот и я о том же, не будет ОПП в 1с, пока это не будет выгодно, а выгодно это наврятли будет. А необходитмость ОПП в 1с - очевидна.
41 oleg_km
 
02.08.12
09:14
(38) Мне кажется все таки правельнее "на СКОЛЬКО это выгодно Нуралиеву". Неочевидна для Нургалиева и большинства 1Сников выгода от ООП, поэтому складывается ощущение, что ООП в 1С присутствует через силу.
42 Vovan1975
 
02.08.12
09:16
(40) че, правда вот так вот очевидна?
43 iceman2112
 
02.08.12
09:18
как говорил, один но мой хороший знакомый: не всем очам видно.
44 SachoZ
 
02.08.12
09:20
Ну если мыслить глобально то ООП В 1С ЕСТЬ, но не все до него дорастают, а ведь надо всего то пойти в разработчики платформы, для остальных есть технология компонент ;-)
45 Vovan1975
 
02.08.12
09:21
(43) а ну да, конечно. Уж снизойдите с вершин своего опыта и интеллекта и поясните уж - нахрена? А то что-то вспоминается мне такой чувак - Спольски с его вопросом - "а что умеет делать эта технология такого что нельзя было сделать ранее?"
46 iceman2112
 
02.08.12
09:23
ну вот еще объяснять, спорить, каждый при своем мнении на этот счет.
47 izekia
 
02.08.12
09:23
(0) вот для того чтобы троллить по теме надо быть немного в теме, хоть какой-то опыт ооп кроме института
а так получается вброс ни о чем и тупое втыкание цитат не к месту
48 Serg_1960
 
02.08.12
09:25
Можете меня пинать ногами, но я скажу:

Если уж рассуждать по больщому счету, то "объектно-ориентированное программирование" - это термин 1С. Который не имет никакого отношения к объектно-ориентированному программированию. Это из той-же оперы, когда я говорю "спецификация" и меня не понимают конструкторы и технологи.
49 izekia
 
02.08.12
09:26
(14) простите, мне с Вами не о чем дискутировать, почитайте сначала книжки
50 Ненавижу 1С
 
гуру
02.08.12
09:26
(39) это только при желании
51 Ненавижу 1С
 
гуру
02.08.12
09:27
(48) да в 1с этих "терминов": ссылка например в других средах разработки и в 1С есть суть разные вещи
52 izekia
 
02.08.12
09:30
(39) копрокод можно при любой парадигме писать, и она тут совсем ни при чем
конкретный функционал реализуется вполне определенным шаблоном
53 Aleksey
 
02.08.12
09:30
54 Vovan1975
 
02.08.12
09:30
(46) да-да, вера это акуенный аргумент, ага
55 godmod80
 
02.08.12
09:31
имхо -весь код 1С транслируется в ООПУ С++
56 Sserj
 
02.08.12
09:34
(55) Не бреши, весь код в итоге транслируется в машинные инструкции процессора
57 izekia
 
02.08.12
09:34
(53) одно дело ооп как технология в сравнении с другими парадигмами, и другое дело когда она рассматривается применительно к 1С, мне вот например кажется, что для 1С куда больше подошло бы ФП
58 Vovan1975
 
02.08.12
09:35
(52)"копрокод можно при любой парадигме писать" именно, поэтому непонятно с какого тут толкают речь о том что с ООП "что-то там упроститься". ООП замечателен тем что привносит кучу паразитного кода и я не понимаю как это упрощает что-либо упрощает.
59 izekia
 
02.08.12
09:36
(58) без ООП в 1С на несколько порядков больше этого "паразитного кода"
60 Maxus43
 
02.08.12
09:36
1c - ООП. Кто не согласен - идите купаться в фонтанах
61 izekia
 
02.08.12
09:37
(60) может сначала книжки почитать про ооп? чтобы не делать таких заявлений
62 Sserj
 
02.08.12
09:37
(58) Большая ошибка, паразитного кода становится на порядок меньше
63 xReason
 
02.08.12
09:37
(5) зачетную пургу он прогнал. Это выдает его, что он вообще нефига не понимает в ООП
64 Vovan1975
 
02.08.12
09:38
(62) ты эта, запусти свое ООП приложение через ольку, и посмотри...
65 Zero on a dice
 
02.08.12
09:40
(49) да о чем нам дискутировать? о неудачном примере в стиле "хочу вон там красненькое"?

(62) где уж меньше, то, что мы отходим от процедурного кода к вызову библиотек парой строчек не означает, что кода меньше.
66 izekia
 
02.08.12
09:40
(63) ну да, тупой тролль, пока он пишет про ненужность ооп, другие люди делают вещи с использованием ооп
67 milan
 
02.08.12
09:40
(61)книжки пусть лохи читают, настоящие одинэсники и так тру ооп программисты.
68 izekia
 
02.08.12
09:41
(65) опыт программирования с использованием ооп был?
69 milan
 
02.08.12
09:41
(65)
>>то, что мы отходим от процедурного кода к вызову библиотек парой строчек не означает
как это связано с ООП ?
70 izekia
 
02.08.12
09:42
(67) ну да, в теме гуру ООП собрались, которые так же как Спольски имеют за плечами не один проект с использованием ООП и теперь могут критиковать этот подход
71 зелёный стол
 
02.08.12
09:42
Шо? Опять?!
72 Zero on a dice
 
02.08.12
09:43
(65) гордиться нечем, но опыт был
(69) это связано с паразитным кодом
73 izekia
 
02.08.12
09:44
(72) проект запущен, сколько строчек тобой было написано? как долго писал?
74 Джинн
 
02.08.12
09:44
(0) ООП в 1С нужно для пальцерастопыривания настоящих программеров.
75 xReason
 
02.08.12
09:45
ну вот смотрите. Есть разные виды услуг. К примеру Услуга Страхования, Услуга Перезвоки(Трансфер), Услуга по ... и т.д. Но у каждой свои заморочки и особенности

как это сделать в ООП, создает базовый класс(справочник) - Услуга. На основание базового класса, где перечислен все основные поля. Мы создаем (наследованием) новые классы (справочники) при это добавив только нужные поля. В 1С это делает ну просто ужасно. С ООП получается красивое и эстетичное решение
76 godmod80
 
02.08.12
09:45
Юнаты)  ООП облегчает не разработку, а доработку программ, и скрывает реализацию кода.
77 Zero on a dice
 
02.08.12
09:46
(73) стенсняюсь спросить, а вам это зачем?
78 AaNnDdRrEeYy
 
02.08.12
09:46
(66)Что бы понять ОПП необязательно быть програмистом, нужно уметь мыслить абстрактно, автор бложика точно не умеет.
отчличее мозга человека от мозга обязьяны втом что обязьяна не может думать абстрактно.
79 izekia
 
02.08.12
09:47
(77) просто судя по твоим высказываниям ты вообще не в теме, вот мне и стало интересно
80 izekia
 
02.08.12
09:47
(76) то есть проектирование к разработке не относится по видимому?
81 iceman2112
 
02.08.12
09:49
без полезно что-то доказывать людям, которые думают, что когда мы пишем ".", то тут уже начинается ОПП.
82 izekia
 
02.08.12
09:50
(81) что вы что вы ... кода мы ставим "." это ФП
83 milan
 
02.08.12
09:50
(81)не "->" ?
84 Vovan1975
 
02.08.12
09:51
(59) сильно смахивает на бездоказательную пургу.
85 iceman2112
 
02.08.12
09:51
без полезно спорить, если люди думают, что когда они пишут ".", то это уже ОПП.
86 godmod80
 
02.08.12
09:51
(85) без полезно - слитно и не ОПП, а ООП - запомни) а то забанят
87 iceman2112
 
02.08.12
09:52
да форум у меня заглючил что то.
88 izekia
 
02.08.12
09:52
(84) то есть пример в (19) ни о чем
а (39) это аргументированное заявление подкрепленное доказательствами ... смешно)
89 Джинн
 
02.08.12
09:53
(75) Эстетичное ровно до тех пор, пока новый программер, пришедший взамен уволившегося, после безуспешных попыток отловить баг в 100500 наследуемых классах, не создаст свой собственный.
90 izekia
 
02.08.12
09:53
еще не безполезно, а бесполезно ... если уж начали
91 godmod80
 
02.08.12
09:54
(90)++
92 Maxus43
 
02.08.12
09:55
Объектно-ориентированный язык программирования (ОО-язык) — язык, построенный на принципах объектно-ориентированного программирования.

В основе концепции объектно-ориентированного программирования лежит понятие объекта — некоей субстанции, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия).

Например, объект человек может иметь поля имя, фамилия и методы есть и спать. Соответственно, в программе можем использовать операторы Человек.Имя:="Иван" и Человек.Есть(пища).
(с)
Можно долго спорить, суть одна, в 1с есть БАЗОВЫЕ классы со своим набором методов и свойств (доки, справочники и т.д.), соблюдаются для этих классов и ПРИНЦИПЫ ООП -  наследование, инкапсуляция, полиморфизм.
Другое дело что прог не может на них влиять в полной мере, как в чистом ООП.
1с это прежде всего:
предварительно компилируемый предметно-ориентированный язык высокого уровня (с)
Он заточен для выполнения конкретной задачи, и чистым ОО-языком конечно не является, да и не нужно
93 xReason
 
02.08.12
09:56
(89) в не в теме, никогда не создает свой собственный базовый класс... Это бред
94 Flyd-s
 
02.08.12
09:57
(31), ага а если в ИначеЕсли перенесется в метод класса, то это совсем другое дело)))
95 godmod80
 
02.08.12
09:57
(92) - все, тему можно закрывать
96 Omskdizel
 
02.08.12
09:59
(35) Это я к "код станет более прозрачным", откуда он станет прозрачнее?
(36) Извините конечно, но это слишком круто переписывать стандартные библиотеки. Нахрен они тогда нужны вообще?
97 Sserj
 
02.08.12
10:00
(96) Ну так просто не говори что парадигма ООП дрянь, если хочешь сказать - реализация такой то библиотеки дрянь.
98 milan
 
02.08.12
10:01
(95) рано.
(94) да, потому что документ должен знать, как правильно отдать свои данные, и когда ты добавишь в конфу свой документ, тебе не надо бутет лезть в глобальник или другой документ, чтобы добавить очередной иначеесли. В это вся соль ООП. Компилятор выполняет часть работы программиста.
99 milan
 
02.08.12
10:02
(98)с внешними печатными формами удобно же ? или обработки заполнения ?
100 Omskdizel
 
02.08.12
10:02
(88) Именно ни о чем. Ради одной этой конструкции городить огород? И как по вашим оценкам будет потребление оперативки клиентом выглядеть? Да и сервером.
101 Ненавижу 1С
 
гуру
02.08.12
10:05
фраза "предметно-ориентированный язык" уже сама по себе смешна
102 Omskdizel
 
02.08.12
10:05
(97) Это не тот аргумент, когда автор говорил об ООП, аргументы там выше. Я привел цитату потому, что фраза насчет более прозрачного кода в общем случае не верна. В случаях типа (19) верна, в случаях, как я процитировал нет.
103 Maxus43
 
02.08.12
10:06
(101) иди правь статью в вики раз не согласен)
104 vde69
 
02.08.12
10:06
библиотека стандартных подсистем - это попытка реализации ООП средствами языка.

Как только станет возможным полноценное ООП в 1с, сама 1с перестанет выпускать и поддерживать такое количество конфигураций, а начнет поддерживать только базовые классы (и обновлять именно их).

1с станет похожа на тот-же сап и обновление будет идти "по модульно", захотел обновить учет ОС но не трогая НДС - пожплуйсто...
105 Omskdizel
 
02.08.12
10:07
+(97) И сдается мне, что примеров типа (19) будет меньше противоположных, но это имхо.
106 ptiz
 
02.08.12
10:07
(19) в 8.2 появилось ООП
Документы[ТекущееОснование.Метаданные.Имя()].СобратьДанныеДляСФ(ТекущееОснование);
107 izekia
 
02.08.12
10:08
(100) чопростите? хоть примерно есть представление что такое класс и как он выглядит в памяти?
108 Omskdizel
 
02.08.12
10:08
(104) Ну мне так показалось в БСП, что далеко не все имеет смысл через классы реализовывать.
109 izekia
 
02.08.12
10:08
(107) экземпляр класса, простите
110 iceman2112
 
02.08.12
10:08
(106) это не ОПП, это извращение
111 Ненавижу 1С
 
гуру
02.08.12
10:09
(107) реализация здесь вторична, спор о концепции
112 Omskdizel
 
02.08.12
10:09
(109) Уже лучше. Сравните с тем, как выглядит вызов просто процедуры, а не метода класса.
113 izekia
 
02.08.12
10:09
(106) еще один 1Сник)
не ооп, а оптимизация кода в (19)
114 izekia
 
02.08.12
10:10
в асме, если я правильно, помню по памяти одинаково
115 oleg_km
 
02.08.12
10:12
(104) Зачем метать бисер... Завтра 1С вдруг возьмет и добавит больше ООП в очередной платформе и большинство с пеной у рта станут доказывать оставшемуся меньшинству что без ООП в 1С как без рук.
От данного обсуждения ничего не зависит. Разве что открыть всем глаза, и тогда толпа просветленных программистов побежит к 1С с требование Даешь ООП. Утопия
116 Sserj
 
02.08.12
10:12
(100) А что будет именно с памятью? Когда создается больше одного экземпляра класса код методов используется общий добавляются только поля новых экземпляров скажу больше код унаследованных методов используется один всей иерархией если он позднее не переопределен.
117 Omskdizel
 
02.08.12
10:12
Хм... Ну как минимум надо экземпляр класса с точками входа методов где-то сначала разместить, а в остальном да, одинаково. И ладно бы там были только точки входа, так ведь еще и данные.
118 vde69
 
02.08.12
10:13
(108) структура подсистем - это самое что ни есть описание структуры классов (как было-бы правильно сделать)
119 Omskdizel
 
02.08.12
10:14
(115) Уважаемый, это все гимнастика ума и не более. Раз вам не доставляет это удовольствие - это не значит, что другим тоже должно быть неинтересно
120 Omskdizel
 
02.08.12
10:15
(116) Мы же говорим про ООП и раз уж рассуждать, то в общем случае переопределенные методы вполне могут быть. То есть в общем случае памяти отжираться будет больше. На вопрос на сколько больше ответь конечно не дать, слишком будет зависеть от конкретной реализации классов и сборщика мусора.
121 izekia
 
02.08.12
10:15
(117) ну как правило те же данные тебе и в структурном программировании нужно хранить, а затраты необходимы на хранение виртуальной таблицы считаю не существенны, в сравнении с тем что в структурном в ответ на это приходится писать

а теперь если сравнить  сложность восприятия того кода что был бы в ооп со структурным, то явно ооп впереди
122 iceman2112
 
02.08.12
10:16
да закрывать надо тему давно уже. Бесполезно спорить, 1сники это программисты, которые заботятся об оптимизации памяти, поэтому они хер..ат такие запросы:

               |ВЫБРАТЬ
       |    ТЧ.Ссылка,
       |ИЗ
       |    Документ.ФормированиеЗаписейКнигиПродаж.Реализация КАК ТЧ
       |ГДЕ
       |    НЕ ТЧ.СчетФактура В
       |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
       |                    НДСПродажи.Регистратор
       |                ИЗ
       |                    РегистрНакопления.НДСЗаписиКнигиПродаж КАК НДСПродажи)
       |    И ТЧ.Ссылка = &Ссылка
123 Sserj
 
02.08.12
10:17
(120) Ну конечно, но раз есть переопределенные методы, то и при структурном программировании были бы различные функции, так что разница на самом деле не такая существенная.
124 Omskdizel
 
02.08.12
10:17
(122) Вы слишком толсто троллить пытаетесь, уши торчат. Почитайте книги, форумы, поучитесь, потом уже приходите. А мы за вас порадоваемся.
125 izekia
 
02.08.12
10:18
(123) он про то что каждый инстанс хранит виртуальную таблицу вызовов ... если я правильно воспроизвел название
126 izekia
 
02.08.12
10:19
методов, точнее
127 Omskdizel
 
02.08.12
10:19
(121) В структурном я храню только те данные, что мне надо, а класс в любом случае будет под данные память резервировать, есть они там или нет.
128 Omskdizel
 
02.08.12
10:19
(125) Да, я об этом
129 Omskdizel
 
02.08.12
10:21
Я вот только хочу сразу сказать, что я то собственно не против ООП в 1С (не за, а не против), мне это нисколько не помешает. Просто хочу узнать, может действительно я что-то упустил по части удобств ООП.
130 izekia
 
02.08.12
10:21
(127) согласись это редкая ситуация, как правило это не будет преимуществом структурного программирования
я просто использую экземпляр соответствующего наследника
131 vde69
 
02.08.12
10:23
(127) мда... глубокие познания...

кыш из темы читать про ООП (свойства virtual, orevide), а так-же про указатели и динамическое выделение памяти, про "кучу", и еще много чего
132 izekia
 
02.08.12
10:23
(129) ну я про тестирование написал
в случае с 1С я бы унаследовал от определенного документа, соответственно мне не нужно было бы писать кучи ненужного кода и экспортировать методы
это вот то что навскидку пришло ... очень не хватает паттерна стратегия, его приходится через извращения реализовывать
133 izekia
 
02.08.12
10:24
(131) да он прав про отпечаток экземпляра класса
134 Omskdizel
 
02.08.12
10:25
(131) О, великий гуру, простите меня ничтожнейшего, но я наберусь наглости и таки останусь в теме, которую по своей недалекости посмел открыть...
135 vde69
 
02.08.12
10:26
(133) да НЕ прав он, конечно память выделяется, но далеко не на весь обьект...
136 izekia
 
02.08.12
10:26
но подчеркну, в целом эти байты не нагрузят память при правильной реализации
137 izekia
 
02.08.12
10:26
(135) а вот теперь подробнее
138 Omskdizel
 
02.08.12
10:28
(136) Вот как раз об этом писал, когда меня гуру перебил. Всегда правильно реализовывать не получится. Будет много неоптимальностей. Как их есть и с нынешней парадигмой программирования.
139 Flyd-s
 
02.08.12
10:29
(98), пиши функцию печати в модуль менеджера. И не нужно будет иначеЕсли дописывать
140 Omskdizel
 
02.08.12
10:29
Со (130) в целом конечно согласен, но частности (в виде неоптимального кода) могут похоронить идею.
141 vde69
 
02.08.12
10:32
(137) а чего подробнее? для обьекта выделяется память под статические свойства и под описание самого объекта, где тут выделение памяти под данные?

Память под конкретные данные выделяется по мере необходимости (при чем там есть несколько разных механизмов, начиная от кучи и заканчивая например файлами опубликованами в памяти, или даже глобальной памятью)

Реализация 1с оперирирует только "кучей", любые другие способы требуют явной типизацией и не могут работать со сборщиком мусора (требубт явного удаления из памяти)
142 Omskdizel
 
02.08.12
10:32
У меня где-то на задворках размышлялки витает мысль, что далеко не всегда будет оптимальным наследовать класс (с возможно лишними данными) и часто придется писать новый базовый класс.
143 izekia
 
02.08.12
10:32
(140) ну это уже о том, что ООП дает кучу возможностей, и человека это окрыляет, а потом когда начинаются затыки, он либо начинает копать глубже и осознавать свои ошибки, либо начинает плеваться и говорить: "Этот ваш ООП"

это вопросы не к парадигме, а к уровню подготовки специалиста
144 izekia
 
02.08.12
10:33
(141) чопростите? объекту выделяется под статику? илите может доку покурите?
145 Omskdizel
 
02.08.12
10:34
:))))
Ребят, это ТАМ все делается так, как пишите, как сделает (если возьмется) 1С одному Нуралиеву известно :)
146 vde69
 
02.08.12
10:34
(144) мы говорим об экземпляре объекта
147 izekia
 
02.08.12
10:35
(142) конкретный пример?)
в целом если проектирование неудачное такое может быть, но рефакторинг на то и существует)
148 Господин ПЖ
 
02.08.12
10:35
тупая ветка
149 Omskdizel
 
02.08.12
10:35
(143) Ну вот отсюда то и вывод, может и станет лучше, но далеко не всем. Может конечно то на то и выйдет, 1Сникам будут больше платить денег :) Ибо станет их меньше :)
150 vde69
 
02.08.12
10:36
(143)+100 порог вхождения в ООП на порядок выше чем в 1с
151 izekia
 
02.08.12
10:36
(146) в (141) речь о статических свойствах, я правильно понял?
152 Ненавижу 1С
 
гуру
02.08.12
10:38
пустые ссылки на записи в таблицы должны быть NULL
ссылки на неиницилизированные объекты в памяти должны быть Неопределено
153 vde69
 
02.08.12
10:38
(151) о статических данных (просто "свойство" - более привычно для ООП в плане доступа к данным)
154 izekia
 
02.08.12
10:38
(149) ну я приверженец идеального кода и стараюсь писать в соответствии с определенными принципами, соответственно с ООП многие вещи для меня стали бы проще, что касается рынка труда - я думаю хуже точно не станет, а если повысится порог, то все же будет выше средний уровень ... проще будет увидеть неспеца, хотя их и так видно
155 izekia
 
02.08.12
10:40
(152) ура!
(153) я просто понял что речь идет о классических статических свойствах класса, у объекта статических свойств нет
156 Sserj
 
02.08.12
10:43
(141) Ну может у разных языков разная реализация, но допустим в яве сразу при создании объекта все инициируется значениями по умолчанию и память резервируется полностью под весь объект.
157 Sserj
 
02.08.12
10:46
+(156) Да и мне кажется что если выделять под объект память по мере необходимости, память станет слишком дефрагментированной и минусы будут намного больше плюсов.
158 rool
 
02.08.12
10:48
(100) Не совсем понятна связь между ООП и памятью? ООП используется на этапе разработки, после компиляции остается оптимизированный машинный код в котором нет не объектов не интерфейсов не других заморочек парадигмы. Разве не так?
159 vde69
 
02.08.12
10:48
(156) реализация классов одинаковая, раньше было два механизма вызова (условно си и паскаль), но сейчас во всех языках есть поддержка обоих моделей библиотек класов и любой obj сейчас можно линковать в любой нормальный язык
160 Omskdizel
 
02.08.12
10:49
(158) Читай ниже, там есть рассуждения на эту тему
161 Buster007
 
02.08.12
10:51
пока нет ООП в 1С многие недовольны ) Как появится ООП в 1С, ИМХО останется тоже много недовольных )
162 vde69
 
02.08.12
10:51
(158) не так, скомпилированый модуль (если не включать библиотеки в тело) получит новый функционал при замене базового класса.
163 vde69
 
02.08.12
10:53
(161) если в 1с появится ООП недовольных будет на порядок больше, по сколько неминуемо произойдет разделение на "системщиков" и "прикладников"
164 Vovan1975
 
02.08.12
11:03
(163) да оно и сейчас есть, за системщиков выступают 1С, за прикладников - все остальные
165 ptiz
 
02.08.12
11:04
Если появится возможность наследования одних объектов от других - это будет полный трындец. У 1С с совместимостью релизов дела обстоят - хуже не придумаешь.

Уже сейчас хватает проблем, когда 1С вдруг решает перенести процедуры из одного общего модуля в другой.

И после этого вы хотите наследование?
166 izekia
 
02.08.12
11:04
давайте лучше это обсудим: v8: OFF: Даешь ФП в 1С!!!
167 Vovan1975
 
02.08.12
11:06
(150) не льстите себе, подойдите поближе...

Есть такое мнение что ООП и разработана для быдлокодеров...
168 vde69
 
02.08.12
11:10
(167) в свое время разработал две полноценных компоненты для дельфи 2.0, пользовалось куча народу (уж не помню как точно назывались, что-то тип rGrid), точно могу сказать, что ООП на порядок сложнее в понимании процедурных языков...
169 Кирпич2
 
02.08.12
11:15
(167) vde69 только к сорока годам переступил порог вхождения в ООП. Теперь ему осталось понять как ООП работает внутри, чтобы не писать ересь про выделение памяти в файлах проецируемых в память и про скомпилированый модуль, который получит новый функционал при замене базового класса.
170 rool
 
02.08.12
11:15
(167) сильное, и не обоснованное заявление... за изучение ООП в основном принимаются те кто уже полностью "въехал" в функциональное программирование. И воткнуть в него поначалу очень не просто. А если еще учесть паттерны - быдлокодер их просто не поймет
171 izekia
 
02.08.12
11:18
"за изучение ООП в основном принимаются те кто уже полностью "въехал" в функциональное программирование"
глупости сходите по ссылке в (166) и сравните о чем здесь и там)
172 rool
 
02.08.12
11:26
(171) Я имел ввиду нормальное изучение, а не хватание верхов без понимания как это работает и нафига оно надо, с последующими воплями что парадигма г..но
173 izekia
 
02.08.12
11:29
(172) изучение - это изучение, а вот результаты могут различаться
174 vde69
 
02.08.12
11:30
(172) есть следующие осноные виды программирования

1. Процедурное (например С, Паскаль)
2. Функциональное (например Лисп)
3. ООП (Например С++)
наверно есть и другие но живьем не сталкивался

с функциональным программированием вообще очень мало кто сталкивался... наверно ты имел в виду Процедурное?
175 Ненавижу 1С
 
гуру
02.08.12
11:31
(174) в шарпе функциональные вставки сделали
176 rool
 
02.08.12
11:32
(172) Ага, попутал термены. В паскале кстати ООП довольно полноценно реализовано
177 izekia
 
02.08.12
11:33
(175) шарп отлично развивается
178 rool
 
02.08.12
11:36
(176) угу, особенно linq впечятлил.
179 vde69
 
02.08.12
11:36
(175) в каком паскале? в 5.0 его не было вообще (вроде он появился в 5.5 или даже 6.0), реально ООП появился в дельфи...
180 rool
 
02.08.12
11:39
(179) не помню версию турбо паскаля с которой мы начинали в инсте, но в ней конструкция object присутствовала и довольно не плохо работала :)
181 Кирпич2
 
02.08.12
11:45
(179) ООП - это Объектно Ориентированный Программист?
182 forforumandspam
 
02.08.12
11:55
Интересен комментарий:
"

К ООП тоже отношусь спокойно, отрицательно.

Так вот, написание кода - это мелочи. Это 5-10% времени и стоимости разработки. Сотни миллиарды долларов и миллионы человеко-лет (без преувеличения), как в трубу, вылетают на поддержание (тестирование, правку багов) софта. Вот это и есть настоящая проблема. Да еще программисты наповадились с места на место бегать каждые 2-4 года, -- только человек освоится и годик поработает продуктивно, -- глядишь, он уже опять куда-то намыливается... И вот тут возникает интересная проблема. В связи с высокой текучестью кадров и большой сложностью реальных проектов читаемость и модифицируемость кода приобретает первостепенное значение!

Чтобы код был читаем и легко модифицируем, крайне желательно, чтобы он был локально понятен. Так, чтобы новый человек, посмотрев на процедуру, смог достаточно быстро понять, что она делает и как. И вот тут, в объектно-ориентированных языках типа Java, С# начинается веселье с конструкторами, деструкторами, виртуальными функциями, наследованием, монстроидальным шаблонным метапрограммированием, полиморфизмом, исключительными ситуациями... Увидев вызов простой функции, как правило сразу понятно что происходит, можно сходить и посмотреть, что она делает. В объектно ориентированных языках, где народ (в особенности вчерашние студенты) любят, ой как любят переоперделять функции, не поймешь, какой из 15 виртуальных методов будет вызван в данном контексте, и читать текст их всех дело утомительное. В результате починка бага занимает в 3-5 раз больше времени.

Перейдем к деструкторам и конструкторам. Видит программист описание локальной переменной, которая нигде не используется, и, не сомневаясь, удаляет его. Программа перестает работать. Что случилось? Оказывается, конструктор этой переменной устанавливает связь с другим объектом. Конечно, за такие фокусы (я имею в виду создание такого конструктора) нужно увольнять, но что написано пером - не вырубишь топором. В результате программист (по-хорошему) вынужден прочитать описания всех конструкторов и деструкторов по всей цепочке наследования всех локальных cтруктурных переменных процедуры. Кому хочется шариться по 40 файлам, чтобы понять, что делается в процедуре? — да никому. Никто этого и не делает, в результате через 3 года в программе, лихо написанной на объектно ориентированном языке, не разберется никто. Посему, и надежность программ, размашисто написанных на таких языках, оставляет желать лучшего. Я уже не говорю про перекрытие операторов, конструкторов копирования и прочее. Творческое пользование темплейтами также сможет доставить потомкам немало приятных минут. А чего стоят исключительные события? Почему-то получается, что код, написанный на языке программирования без скрытого поведения, поддерживать и сопровождать гораздо легче. Просто уже потому, что вероятность наступить на грабли меньше. Описана переменная -- можно быть уверенным, что ничего больше это не означает. Вышли из блока -- значит, вышли, и нечего кроме. Что написано, то и происходит. Когда же приходится докапываться до третьего слоя истины -- это бардак. К сожалению, на объектно ориентированных языках наломать дров проще простого, что мы и наблюдаем изо дня в день.

Как это ни удивительно, при промышленном программировании залогом хорошего здоровья является простота. Чем проще, тем лучше. Код должен быть понятен, иначе человек, который заменит Вас через 2-4 года, не справится. Хотите проинициализировать переменную? Вызовите процедуру. Надо вызвать функцию? Вызовите ее напрямую. Очевидно, что чем проще язык программирования, тем трудней сделать на нем семантическую ошибку. Если достаточно полное и предельно краткое описание языка занимает около 1000 страниц, можно ли ожидать, что рядовой программист будет знаком хотя бы с 50% особенностей языка? -- навряд ли. Тогда откуда может быть уверенность, что достаточно навороченная конструкция представляет собой именно то, что хотел сказать программист?

Далее. Стандартные библиотеки. Опять же, с точки зрения промышленного программирования, — чем проще, тем лучше. Если в стандартной библиотеке (к тому же динамически подгружаемоей) есть баг, то это беда. Если программисты его не нашли -- значит, найдут пользователи. Если нашли и обошли, то проблемы начнутся после того, как пользователь обновит библиотеки и в новой версии баг будет починен. Наконец, необходимым требованием является 100% обратная совместимость библиотек. Ну скажите мне, хоть одна библиотека для Java удовлетворяет этому требованию? А есть ли там хоть одна процедура без какого-либо ляпа? Я уже не говорю о вопросах совместимости, инсталляции и прожорливости разных версий фреймворков под C# .NET и о том, что на изучение постоянно изменяющихся спецификаций различных новомодных библиотек может уйти полжизни, не говоря уже о проблемах стабильности их работы на практике.

Смежная проблема. Возраст языка. Чем старше язык, тем лучше и глубже его знают программисты. Всем известно, что можно делать, чего нельзя, а что можно, но лучше не нужно. С новомодными языками дело обстоит сложней, и опыт, равно как устав караульной службы, пишется кровью программистов. Наконец, не следует забывать, что разработчики компиляторов тоже не боги и могут ошибаться, а чтобы найти баги в компиляторе с Java или, в особенности Сановском, напрягаться не нужно - баги Вас сами найдут.

Вообще, за последние 20 лет вышла масса литературы на тему дизайна программного обеспечения. Авторы книг статей постарались на славу. Были выделены и формализованы основные конструкции в виде паттернов проектирования. Сформированы основные практики и рекомендации. Однако, у этой большой и красивой медали есть обратная сторона – очень редко говорится О РЕАЛЬНОЙ НЕОБХОДИМОСТИ ПРИМЕНЕНИЯ тех или иных методик, а также о трудозатратах при этом. Подавлющая масса молодых программистов из-за отсутсвия опыта воспринимает все подобные материалы совершенно неадекватно, стремясь де-факто реализовать в одном месте практически все то, о чем они когда-либо читали и слышали (а слышали они в силу возраста как раз все последние веяния). Им трудно дифференцировать рациональные зерна от бесполезных "бантиков" и программирование превращается не столько в создание требуемого функционала, сколько в продумывание деталей как это будет написано. Внешнее и второстепенное выдвигается на первое место. Значительную часть времени начинает занимать бесполезный рефакторинг программного текста и мысли о том как же организовать очередное хитрое зацепление классов, в то время как создание полезнго функционала уходит на задний план. Например, в игровой индустрии подобные повадки особенно вредны. Нужен функционал, не нужен лишний текст. 99% текста выполняют 100% работы.

Например, когда-то одному разработчику был дан проект очень незатейливой игры. Предполагалось, что эта игра займет около месяца разработки. Но месяца не хватило. Спустя шесть недель выяснилась причина. Программист попался очень педантичный и вместо того чтобы взять чистый СИ и написать игру, он 80% времени занимался тусовкой классов в сложнейшей иерархии. Когда посчитали – оказалось порядка 210 классов. Движок получился, была написана чудовищная гора текста. В объекты было завернуто все, начиная от объектов межпоточной синхронизации и кончая экранными виджетами со своей собственной системой сообщений. Да только вот беда — сама игра была в совершенно зачаточном состоянии и не работала. Старые игры для GBA, C64, NES, SNES, Megadrive, ZX Spectrum, Atari, N64 всегда, с неизменным постоянством работали как часики. Можно конечно сейчас сказать "ну знаешь ли, не сравнивай сложность продуктов". А ничего подобного! Просто нужно знать как писались эти вещи и на чем писались. Раньше ведь даже не было IDE, и дебаггеров с одним тычком мыши. Не было самих мышей. Загружались с дискет (а еще раньше с кассет!). Иногда не было возможности отлаживаться или даже запускать код на самом устройстве. Так может уделять внимание эффективности, задачам которые пытаемся сделать?

Информация к размышлению: http://www.softpanorama.org/SE/anti_oo.shtml"
183 Sserj
 
02.08.12
12:40
(182) Какой то взрыв мозга неудачника.
Бери простой язык Басик, напиши и попробуй сопроводи на нем чтонибуть больше 1000 строк кода.
А благодаря ООП развиваются проекты с миллионами строк, понятно что разобраться в них это не в 100 басиковских, но зато реально.
184 Маленький Вопросик
 
02.08.12
12:47
я пишу на пхп исключительно классами - тупо кода меньше.. и он мне понятнее
185 rool
 
02.08.12
13:01
(182) Насчет шариться по куче файлов: а разве в 1С без ООП сейчас этого делать не надо? Разбор одной обработки проведения документа заставляет залезть в десятки общих модулей, и разобрать функции с дикими параметрами (вроде структур формирование которых размазано по километру кода). Офигительное упрощение читабельности...
186 gae
 
02.08.12
13:11
(185)
>>разобрать функции с дикими параметрами
Что же поделать, если все эти параметры нужны. Не 2+2 ведь складываем.

Да, многие процедуры вынесены в общие модули и, частенько, мудрено устроены и мудрено взаимосвязаны. Сторонним программистам кажется, что это все необоснованно мудрено, но они то всего лишь пытаются проанализировать как работает какой-нибудь частный случай, какой-нибудь отдельный документ. А вся мудреность была создана, чтобы работал "общий случай", чтобы были единые, более менее универсальные механизмы для множества документов, чтобы была везде была примерно одинаковая метода построения кода. Это значительно упрощает развитие и поддержку конфигурации, если, конечно, изучить её внутреннее устройство на нормальном уровне.
187 rool
 
02.08.12
13:21
(186) Да но параметр в виде объекта целиком описанного в одном месте несколько понятнее чем например такая фиговина:

Параметры = Новый Структура;
Параметры.Вставить("Хрень", ...);

//десяток строк кода

Хрень2 = Новый ТаблицаЗначений;
// добавлены колонки
// десяток строк кода, запрос..
//заполнение таблицы значений

Параметры.Вставить("Хрень2", Хрень2);

//Еще десяток строк

Хрень3 = и т.д.

Плюс для параметра - объкта в языке еще и интеллисенс в нормальных средах разработки работает, чего не скажеш о подобной структурке...
188 vde69
 
02.08.12
13:25
(186) реализация в ООП будет примерно такая

Расчетчик = Новый ПодсистемаВалют.РасчетКурсов;

Расчетчик.ВалютаИсточник = ВалютаДокумента;
Расчетчик.ВалютаПолучатель = ВалютаРегламентированоУчета;
Расчетчик.ДатаКонвертации = ДатаДокумента;

Для каждого эл из Документ.Товары Цикл
НоваяСуммаПоСтроке = Расчетчик.Конвертировать(эл.Сумма);
189 gae
 
02.08.12
13:26
+(186) меня, например, убивает вот такая читабельность кода:

СтрокаТабличнойЧасти.ЕдиницаИзмерения     = СтрокаТабличнойЧасти.Номенклатура.ЕдиницаХраненияОстатков;    
СтрокаТабличнойЧасти.Коэффициент = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;

Да, читабельно и понятно, и вот это читабельное и понятное по всей конфигурации разбросано, в каждом месте, блджад, читабельно и понятно...  И теперь если надо изменить логику получения единицы измерения по умолчанию, надо перелопачивать все эти места.
Нет чтоб сделать в общем модуле единую функцию для получения единицы измерения по умолчанию и её коэффициента.
190 vde69
 
02.08.12
13:27
(188) а можно будет сделать новый класс

ПодсистемаВалют.РасчетКурсов.ВРегВалюту
191 gae
 
02.08.12
13:31
(187) ну так все равно все сложное содержимое объекта так или иначе будет где-то инициализироваться, все будет заполняться, каждое поле.

Так и тут, структуру заполнили и гоняем её потом.
192 NS
 
02.08.12
13:32
(183) И чем-же в объектах разбираться проще чем в процедурах и функциях?
193 gae
 
02.08.12
13:35
(190) а какие принципиальные преимущества перед просто универсальной процедурой для пересчета, как сейчас в 1С?

Для меня главное чтобы каждый "элемент прикладной логики" был зашит в одном месте, объект это или процедура - это уже не важно.
194 vde69
 
02.08.12
13:37
(192) например тем что присвоение ппараметров делается через свойства, и первичную проверку типов, корректности с другими параметрами можно сделать внутри объекта и не парить людям мозг :)

ну и еще кучу чего можно просто скрыть...
195 Ненавижу 1С
 
гуру
02.08.12
13:37
(193) его можно подменить на другой и использовать также  - паттерн стратегия
хотя конечно в данном случае вряд ли это востребовано
196 rool
 
02.08.12
13:37
(191) я все таки про читаемость кода сторонним разработчиком... Возьмем функцию которая в качестве параметра принимает фиговину типа (187), а то и несколько таких фиговин, так вот чтобы понять как работает данная функция надо скурить весь процесс формирования этих диких структур в функции вызывающий и понять как собственно эта структура устроена, или смотреть в отладчике, что не всегда возможно на боевых серверах с выключенным дебаг-модом... а вот при наличии объктов и собственно параметра в виде объекта, достаточно скурить описание его полей описанных в одном месте
197 izekia
 
02.08.12
13:40
(192) смотря кто писал, тут уже вопрос к именованию ...
но в целом для меня проще увидев объект и его методы понять что же он делает, чем методы которые отделены от данных и фактически мне нужно больше времени на ту же процедуру
198 vde69
 
02.08.12
13:40
(192) почему, например на основании этого делаем классы

РасчетчикРублевый, РасчетчикУправленческий

оно будет сильно читабельнее :)
199 izekia
 
02.08.12
13:41
(196) мы прямо синхронно выступили))
200 Нуф-Нуф
 
02.08.12
13:41
200
201 gae
 
02.08.12
13:41
(196)
>>надо скурить весь процесс формирования этих диких структур в функции
также придется скурить и формирование этих диких структур в объекте
202 rool
 
02.08.12
13:43
(201) Повторюсь я вижу все описание объекта в одном месте. Структура же зачастую формируется километром кода и всю её я сразу увидеть не могу
203 gae
 
02.08.12
13:44
(198) ну так то да, главное не переборщить :)

Но! в 1С то точно также делаем, две процедуры для пересчета в Регл и Упр валюты, которые внутри себя вызывают уже центральную процедуру пересчета, и всё.
204 gae
 
02.08.12
13:45
(202) ну случаи растягивания на километры кода боюсь не от этого зависят, а от
1. реальной сложности алгоритма
205 gae
 
02.08.12
13:45
+(204) 2. криворукости
206 vde69
 
02.08.12
13:48
(203) разница в том, что если я в ООП в обьект Расчетчик добавлю свойство "Кратность" оно сразу появится и в унаследованых обьектах РасчетчикРублевый, РасчетчикУправленческий и его можно будет использовать СРАЗУ...
207 rool
 
02.08.12
13:49
(204) и опять речь не об этом. я вижу функцию с параметром, я хочу знать что этот параметр должен содержать, в случае параметра объекта я просто смотрю список его полей не заходя в отладку и не читая простыни кода... в случае с 1с если функция не откоментированна я хз что этот параметр должен получить, я даже типа данных его не вижу
208 vde69
 
02.08.12
13:50
(206) или например свойство "бивалютная" и будет расчитыватся бивалютный курс :)
209 gae
 
02.08.12
13:56
(207) а, ну в смысле, что в средах разработки отображается состав объекта в отдельном окошке? да, удобно
210 gae
 
02.08.12
13:58
(208) ну да, ООП тут рулит.
211 gae
 
02.08.12
14:03
Я применяю в 1С такие псевдообъекты:
Делаем общий модуль, в нем конструктор структуры, которая содержит данные объекта. Далее в модуле уже идут процедуры-методы, первым параметром у которых идет структура.

Инициализируем экземпляр структуры-объекта, и потом вызываем процедуры, засылая в них в них этот экземпляр.
212 notton
 
02.08.12
14:09
(0) очень интересное мнение с описанием деталей всей этой кухни
213 izekia
 
02.08.12
14:18
(212) лажовым описанием ...
214 iceman2112
 
02.08.12
14:21
Дорогой, я не умею готовить твоё любимое блюда, вообще зачем оно тебе надо объясни? Может я не буду учиться его готовить, а ты поешь яичницу.
215 rool
 
02.08.12
14:31
и ваще надо писать на ассемблере.. все остальное происки жиреющих империалистов :)
216 Mafoni
 
02.08.12
14:56
(122) - за такой запрос руки бы поодбивал.
217 Mafoni
 
02.08.12
15:20
(189) - Посмотри конфу от раруса - там есть в каждом модуле объекта документа - процедура - ОбработкаРеквизита + она же есть в общем модуле - идея следующая если происходит изменение реквизита то лезем в ОбработкуРеквизита с нужными параметрами - если реквизит спецефический то в этой процедуре выполняем нужные действия - если реквизит какой нить общий (пример - Номенклатура) - лезем в общий модуль в одноименную процедуру ОбработкаРеквизита и там чего то меняем уже - итог - изменение логики = изменение одной строчки.
218 izekia
 
02.08.12
15:46
(217) плачу от умиления, какой шикарный костыль
219 IamAlexy
 
02.08.12
15:47
(217) шикарно...

потом приходит человек незнакомый с этой логикой и начинает править непосредственно в том месте где поменялась логика..

потом приходит третий человек который знает про этот костыль...
220 Mafoni
 
02.08.12
15:49
(218) - согласен что это не идеальное решение, но что есть то есть.
(219) - самому сначало было не привычно - потом ниче - даже удобно стало, а про людей не знающих - да могут дров наломать.
221 IamAlexy
 
02.08.12
15:49
+(219) а еще лучше так - приходит  второй  и делает подписку на событие
приходит третий - выносит в общий модуль изменение логики
приходит четвертый - правит прямо на месте
приходит пятый и ох.евает...
222 Mafoni
 
02.08.12
15:51
(221) - имхо было 5 человек - после того как вкурили что к чему - изменения делали единообразные согласно структуре.
223 Mafoni
 
02.08.12
15:52
(221) - с вашей точки зрения как было бы верно реализовать сию фигню ?
224 IamAlexy
 
02.08.12
15:54
(223) если честно то я вобще не понял накой хрен это нужно...

типа был реквизит "Номенклатура" а его поменяли на "контрагенты" или что?
225 Mafoni
 
02.08.12
16:04
(221) - и если не затруднит то ответьте пожалуйста на такой вопрос - как с помощью подписки на событие отловить изменение реквизита в открытой форме ?
226 Mafoni
 
02.08.12
16:18
(224) - Ниже пример - единицу измерения заполнять нужно всегда не зависимо от документа - а цену к примеру только в определенном документе.

Форма документа

Процедура ТоварыНоменклатураПриИзменении(Элемент)
   ОбработкаРеквизита("Товары.Номенклатура",ЭлементыФормы.Товары.ТекущаяСтрока,ЭтаФорма);    
КонецПроцедуры

Модуль объекта документа

Функция ОбработкаРеквизита(Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт
Если ИмяРеквизита = ......
ИначеЕсли Имя="Товары.Номенклатура" Тогда
  Рез = дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры); /// Вызов процедуры из ОбщегоМодуля
  Рез = ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
  Рез = ОбработкаРеквизита("УстановитьРозничнуюЦену",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
  Возврат Рез;
КонецЕсли;
КонецФункции

Общий модуль

Функция дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт
Если ИмяРеквизита = ......
ИначеЕсли Имя="Товары.Номенклатура" Тогда
/// Тут у примеру заполняем единицу измерения
Возврат Рез;
КонецЕсли;
КонецФункции
227 ptiz
 
02.08.12
16:26
(226) Не дай бог такое сопровождать.
228 IamAlexy
 
02.08.12
16:28
(226) полный п.здец...

и эти люди требуют ООП в 1С?

выжигать их каленым железом...
229 Mafoni
 
02.08.12
16:29
(227) - 5 лет :) сопровождал сие чудо - кстати это Управление торговлей от Раруса
230 Mafoni
 
02.08.12
16:29
(229) - конфа мож как то и по другому называется сейчас уже не упомню.
231 Mafoni
 
02.08.12
16:30
(228) - Алексей вы не ответили на вопрос в (225)
232 izekia
 
02.08.12
16:47
(228) дада, лучше ФП
233 Mafoni
 
02.08.12
17:02
(232) - ИМХО - каждому свое.
234 IamAlexy
 
02.08.12
17:04
(231) при записи объекта посмотреть что изменилось например.. но в контексте пересчета ТЧ который вы показали это конечно же неприменимо...
235 Mafoni
 
02.08.12
17:22
(234) - спасибо.