Имя: Пароль:
1C
1С v8
1С с точки зрения ООП
0 Консультант Баранов
 
26.07.19
10:01
Предстоит обучение программистов основам 1С.

Можно, конечно, просто показать создание справочников, документов.

Но может как-то описать на аналогии с ООП? Есть такие материалы?
1 Волшебник
 
26.07.19
10:10
в 1С есть ООП
2 Волшебник
 
26.07.19
10:12
Создание своего документа — это фактически наследование от абстрактного типа "Документ"
Групповое перепроведение документов — это применение полиморфизма.
3 Консультант Баранов
 
26.07.19
10:12
(1) Да я не спорю. Вопрос как объяснить.

"Вот это предопределенный класс справочников можете добавлять свои классы".

А у справочника может быть табличная часть это как с точки зрения ООП?

Что такое виртуальные таблицы и т.п.
4 Волшебник
 
26.07.19
10:14
(3) Это инкапсуляция
5 bolero
 
26.07.19
10:15
off: вангую срач страницы на три минимум

Таки замечу, что одна из первичных парадигм ООП - возможность создать объект, а у объекта описать функцию, которую можно вызвать, имея только экземпляр объекта.

В 1С я вот не могу просто взять и создать объект, чтобы у него функция была. Не хочу документ, хочу произвольный объект.
6 Вафель
 
26.07.19
10:15
(4) Разве? инкапсулаяция - это приватные члены класса
7 Волшебник
 
26.07.19
10:15
(5) Обработка
8 Вафель
 
26.07.19
10:16
полиморфизм в 1с не нужен ибо нет строгой типизации
9 Волшебник
 
26.07.19
10:16
(6) С точки зрения архитектуры приватных членов класса вообще не существует.
10 Кирпич
 
26.07.19
10:17
задолбали своим ООП
11 Волшебник
 
26.07.19
10:17
(8) Может и не нужен, но он там есть.
12 Консультант Баранов
 
26.07.19
10:17
(5) > Таки замечу, что одна из первичных парадигм ООП - возможность создать объект

Вопрос скорее как объяснить основы 1С по аналогии с ООП.
13 Вафель
 
26.07.19
10:17
(11)  ты точно понимаешь занчение слова полиморфизм?
14 Консультант Баранов
 
26.07.19
10:19
(8) > полиморфизм в 1с не нужен ибо нет строгой типизации

У реквизитов есть.
15 Вафель
 
26.07.19
10:19
https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов.
в 1с это по дефолту
16 Волшебник
 
26.07.19
10:22
(13) С точки зрения ООП, полиморфизм — этто разная реализация одноимённого метода класса-потомка. Вызывающая сторона вызывает этот метод, рассчитывая на его наличие в связи с тем, что такой метод есть у класса-предка.

Например, класс-предок Документ обладает методом Провести() (или Записать в режиме проведения).
Каждый класс-потомок Документ.Реализация и Документ.БанкПриход реализует этот метод по-своему, двигает свои регистры.
17 Cyberhawk
 
26.07.19
10:24
"обучение программистов основам 1С" // Аналогии будут скорее вредны, чем полезны
18 Dmitry1c
 
26.07.19
10:25
Любая обработка - это класс.

Создаешь обработку, к ней

1. Процедуры модуля объекта - это процедуры объекта, их без них не создать
2. Процедуры модуля менеджера - это методы класса, не надо создавать экземпляр класса для использования методов


А уж сколько паттернов проектирования в БСП применяется


А вы говорите, нету ООП...
19 Dmitry1c
 
26.07.19
10:26
Создай обработку - назови её "Фабрика документов", и пусть она тебе генерирует разные документы в зависимости от типа документа и передаваемых параметров, а также предопределенных настроек

Вот тебе и паттерн - фабрика или фабричный метод.


А вы говорите, нету ООП...
20 Dmitry1c
 
26.07.19
10:29
Мне вот не хватает "Интерфейсов":

можно было бы наследовать БСП-шные интерфейсы и оставалось бы писать реализацию

Я думаю, когда-то это появится.
21 Консультант Баранов
 
26.07.19
10:39
Может есть какие-то материалы в которых это рассмотрено?
22 Волшебник
 
26.07.19
10:42
(21) Официальных нет. Фирма 1С всячески избегает этой темы. Они молчаливо согласились, что в 1С нет ООП, а встроенный язык программирования является неполноценным скриптовым языком типа JavaScript.
23 bolero
 
26.07.19
10:47
(17) соглашусь, тут не с ООП аналогии надо проводить, а, например, с EJB.

JBOSS - сервер приложений, сам разруливает где у него там база и где сеть, только клиента своего не имеет. Но переучивать сениор жавистов на 1С - такая себе инвестиция. А джуны и тем более не жависты сами EJB боятся и не понимают.
24 unregistered
 
26.07.19
11:03
(0) > может как-то описать на аналогии с ООП?

Зачем?
Вам работники нужны или нытики, мечтающие о полноценном ООП в 1С?

ИМХО, задача, которую вы ставите, - идиотизм.

Вы хотите научить ребёнка плавать и для этого намереваетесь прочитать ему несколько лекций по гидростатике, гидродинамике и физиологии? Ну-ну... С точки зрения общего развития это безусловно будет полезно слушателю. Только надо быть готовым к тому, что плавать он от наличия этих знаний не начнёт.

1С - это предметно-ориентированная среда. Если базовых начальных знаний по программированию у ваших студентов совсем нет, то может быть им и нужно пару лекций на эту тему. Если же вы готовите 1С-ников из людей, уже имеющих программистские знания, то это будет абсолютно лишним и ненужным. Им нужны конкретные прикладные знания - методы и подходы работы с конкретными объектами (справочниками, документами, регистрами, отчетами и пр.).
25 fisher
 
26.07.19
11:43
(0) "Свободного" ООП в 1С нет. Это сделано сознательно для максимального упрощения и типизации прикладных решений.
Есть специальный перечень предопределенных классов (справочники, документы, регистры), от которых можно очень ограниченно наследоваться - "одношагово" и переопределять родительские методы нельзя.
Плюшки за это (кроме упрощения) - авто-ORM и авто-интерфейсы.
Можно рассматривать 1С как развесистый фреймворк, в котором практически нет необходимости достраивать объектную модель и поэтому такая возможность была сознательно зарезана. Программист работает только с экземплярами предопределенных классов и экземплярами "одношаговых наследников".
26 Вафель
 
26.07.19
11:44
(25) что раньше была как фича теперь уже как ограничение
27 Sserj
 
26.07.19
11:54
Какими умными словами бросаются :)
Полиморфизма не существует в принципе!
Это всего лишь подсказка компилятора о том что скорей всего ты ошибся.
28 Волшебник
 
26.07.19
11:56
(27) Когда работает полиморфизм, компилятор уже давно выключен. Выбор требуемой функции для вызова может быть осуществлён только во время исполнения программы.
29 Sserj
 
26.07.19
12:01
(28) А вот и не правда. Когда работает полиморфизм там вообще нет никаких объектов, там сплошные двоичные команды и goto на адрес :)
Понятие "объект" вообще есть только на этапе компиляции :)
30 fisher
 
26.07.19
12:06
Когда в классическом ООП компилируемых языков со статической типизацией говорят про полиморфизм (которого куча видов в действительности), то чаще всего подразумевается возможность вызывая один и тот же метод через интерфейс общего предка, вызывать при этом реализацию конкретного экземпляра-потомка (динамическое связывание методов и все такое).
Для 1С это не имеет смысла, так как это интерпретируемый язык с динамической типизацией. Можно дергать почти что угодно и как угодно в рантайме. Если дернуть не получилось - просто рантайм-эксепшн прилетит. Тут короче все также, как у всех скриптовых языков с динамической типизацией в целом по больнице.
31 rsv
 
26.07.19
12:14
(0) ....разве 1с существует в отрыве от табличек ? Без них и 1с нет . Обучайте sql
32 rsv
 
26.07.19
12:16
(25) т.е можно свободно полгать и ....обойтись без табличек
33 rsv
 
26.07.19
12:17
вымысле полгать  равно прогать
34 Sysanin_1ц
 
26.07.19
12:17
(24) вот потом после такого предметного обучения выходят овнокодеры которые кроме 1с ничего не видели.
35 Sysanin_1ц
 
26.07.19
12:20
(25) извините а что отсутствие ООП максимально упрощает? Вы в 1с лапшу из модулей видели? В ООП такой лапши быть не может
36 fisher
 
26.07.19
12:21
(29) Ну так речь о том, что в случае полиморфизма выбор адреса на который нужно делать goto происходит уже в процессе выполнения.
37 fisher
 
26.07.19
12:30
(35) Давно живу, много видел. Лапша из объектов пострашнее будет. Поборники ООП почему-то всегда кивают на хорошие решения. "Смотрите мол, как можно было бы круто сделать". Исходите из того, насколько можно сделать фигово. И сравните, с чем справиться (дописать или отрефакторить) проще - с фиговым решением без ООП или с фиговым решением с ООП. В 1С люди вообще без профильного образования успешно фигачат.
38 Дух пролетариата
 
26.07.19
12:31
(35) Чо?
Открой любой проект под ведроид.
39 Sserj
 
26.07.19
12:37
(35) Мифы и предания глава 1. :)
Какая принципиальная разница в написании СделатьЧтоТо(Объект) и Объект.СделатьЧтоТо().
Лапшу можно варить очень многими способами!
40 unregistered
 
26.07.19
12:47
(34) ООП они должны в учебных заведениях изучать. Если соответствующего образования и знаний нет, то нечего вообще называть себя программистом.
Если ты пришел в 1С, то надо изучать 1С, а не ООП, которое ты и так должен знать априори.
А пытаться обезьяну научить ездить на велосипеде - глупое занятие, результатом которого будет обезьяна, ездящая на велосипеде, а не профессиональный велогонщик.
41 Вафель
 
26.07.19
12:51
(37) одинаково сложно будет
42 Вафель
 
26.07.19
12:53
на самом деле есть куча более важных штук помимо ООП
43 Sysanin_1ц
 
26.07.19
12:53
(39) скорей всего текст для сравнения будет выглядеть так

В 1с

СделатьЧтотоНаКлиенте(обьект)
СделатьЧтотоНаСервере(обьект)
СделатьЧтотоНаСервереНаКлиенте(обьект)

В ООП

Объект.СделатьЧтото(вариантметода)
44 bolero
 
26.07.19
12:54
(38) не путай всех программистов с конкретно жавистами. Ведрод более менее равно жава.

Жависты чтобы сосиски сварить дома перед выходом на работу себе в голове построят двадцать восемь уровней абстракции. Без абстракций жить не могут.
Универсалы на жаве пишут без лапши, сразу к делу.
45 Вафель
 
26.07.19
12:54
(43) а сам объект где будет в это время жить?
46 bolero
 
26.07.19
12:58
(45) тащем-то его волохает по ссылке по разным контекстам ;)

не удивлюсь, если при этом действительно клиент и сервер объектом в волейбол по сети играют

перекатиполе какое-то
47 Вафель
 
26.07.19
12:59
по ссылке нельзя с клиента на сервер передать, только через сериализацию
48 Sserj
 
26.07.19
13:01
Я тоже умею жонглировать буквами :)
Меняем точку на запятую и количество знаков остается неизменным:

СделатьЧтоТо(Объект, вариантИсполнения)
49 Sserj
 
26.07.19
13:02
(48)->(43)
50 Вафель
 
26.07.19
13:05
(48) а разница в том, чтобы не писать

Если ТипЗнч(Объект) = Тип(1) Тогда
  делаем1();
ИначеЕсли ТипЗнч(Объект) = Тип(2) Тогда
  делаем2();
...
51 Sserj
 
26.07.19
13:07
(50) Опять жонглирование. В ООП это просто превращается перегрузку:

Делаем(Тип1)
Делаем(Тип2)
...
52 bolero
 
26.07.19
13:08
(48) осталась принципиальная разница: это не экземпляр объекта производит действия над своими данными, а какая-то процедура его обрабатывает снаружи

не катит, это не ООП, а манипуляция над структурой
53 Вафель
 
26.07.19
13:08
(51) В ООП - это разные объекты
54 Вафель
 
26.07.19
13:09
(52) как раз снаружи или изнутри - никакой разницы.
на уровне ассембелра никакого ООП нет
55 AquaMan
 
26.07.19
13:11
Современный ООП базируется на принципах SOLID, то что в институте проходили в начале века про полиформизм и наследование можно забыть. В 1С из этого можно реализовать только S и то, только теоретически, в реальных проектах никогда такого не видел.
56 VladZ
 
26.07.19
13:13
(0) Нет. Не нужно.
57 Дух пролетариата
 
26.07.19
13:30
(44) Стоп-стоп. Мы говорим об ООП. Жаба - это чистейшее, кристаллизованное ООП. Разве не так?
58 yavasya
 
26.07.19
13:34
(0) бро, зачем тебе 1С ? многие хотят попробовать на других языках, а ты к нам
59 Волшебник
 
26.07.19
13:34
(57) В Java ущербное ООП, там нет множественного наследования.
60 Дух пролетариата
 
26.07.19
13:34
+(57) Более того, сам упомянутый принцип SOLID прямо подразумевает (исходя из S) ту самую лапшу классов, которая даже в небольших проектах многажды перекрывает лапшу модулей в типовых конфах 1С.
61 bolero
 
26.07.19
13:35
(57) на жаве МОЖНО писать без лапши, было бы желание

но так уж сложилось, что:
* на PHP пишут задней лапой бездомной собаки (оторванной от собаки)
* на 1С пишут не задумываясь о том, как это потом поддерживать
* на perl пишут криптограммы из регэкспов
* на жаве пишут лапшу из абстракций

хотя языки так делать не обязывают

это как где-то пьют чай с солью, потому что так принято, объяснять бесполезно
62 Дух пролетариата
 
26.07.19
13:37
(61) Ну и в 1С можно всё подряд в модуль формы писать, чо.
63 Дух пролетариата
 
26.07.19
13:38
МОЖНО многое, мы ведём речь о принципах ООП, которые проблему "дохрена модулей в 1С" ещё больше раздувают в "дохрена классов в проектах на жабе".
64 AquaMan
 
26.07.19
14:23
Причем тут количество классов и лапша? Да, классов бывает очень много, но они друг от друга не зависят, а зависят от абстракций. При небольшом изменении в одном классе, тебе не нужно перелопачивать всю кодовую базу, если не менялся публичный интерфейс.
65 fisher
 
26.07.19
14:30
А в GoLang вообще нет наследования. Вот ужас-то.
66 Arbuz
 
26.07.19
15:31
Представляю, что если бы в 1С было нормальное ООП, с инкапсуляцией и перегрузкой, с нормальным наследованием, то насколько матерней ужас был бы в коде типовых и не очень решений. Представьте себе говнокод-симбиоз из худших традиций 1с и жавы... Бррр... Тысячи устоявшихся кривых классов с сотнями нелепых наследований, забагованные толпами невникающих идиотов и никакой внятной парадигмы - кто-во-что-горазд - возможностей то гораздо больше. Глюкалово и Тормозилово. Трэш и Содом. Хотя что-то подобное мы и так имеем безо всякого ООП. Так что ООП в 1С не нужен! Хотя в старых клюшках на костылях он есть и очень неплох.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой