Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

1С с точки зрения ООП

1С с точки зрения ООП
Я
   Консультант Баранов
 
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) Это инкапсуляция
   bolero
 
5 - 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) С точки зрения ООП, полиморфизм — этто разная реализация одноимённого метода класса-потомка. Вызывающая сторона вызывает этот метод, рассчитывая на его наличие в связи с тем, что такой метод есть у класса-предка.

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

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

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


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


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

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


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

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

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

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

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

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

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

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

В 1с

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

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

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

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

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

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

   Sserj
 
51 - 26.07.19 - 13:07
(50) Опять жонглирование. В ООП это просто превращается перегрузку:

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.