|
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) а разница в том, чтобы не писать
|
|||
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С не нужен! Хотя в старых клюшках на костылях он есть и очень неплох.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |