|
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) - спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |