Посоветуйте плз что почитать про 1С опытному бэкенд разработчику на Java, который раньше никогда не проектировал бухгалтерские системы.
Основные цели:
- разобраться с транзакционной моделью
- структура регистров (оборотные и остаточные), агрегаты, индексы
- принцип двойной записи и его воплощение в коде
Короче в идеале какой-то условный Радченко в адаптации для опытных программистов не1Сников :) есть что-то такое?
Это юмор такой? Осваивают 1С только в Финляндии и Шушенском?
Какая-то странная ассоциация термина "все передается по ссылке" для программиста...
И да, это юмор. Опытный программист на Java должен понять. Там все передается по значению.
Безусловно 1С имеет объектно ориентированную сущность (и безусловно 1С не является 100% "чистым" объектно ориентированным языком).
Полиморфизм можно реализовать через "подписку на события"
Инкапсуляция - к нему на мой взгляд можно отнести механизм RLS в 1С .
Наследование - Документ "Приходная накладная" наследует свои свойства и методы от "базового класса" Документ.
И безусловно 1С это предметно-ориентированный язык. Целый ряд объектов в 1С создан и "заточен" под реализацию конкретных предметных областей (например бух учёт с её двойной записью или расчет зарплаты)
...Наследование - Документ "Приходная накладная" наследует свои свойства и методы от "базового класса" Документ....
Сложно назвать "Документ" базовым классом. Ведь объект класса "Документ" нельзя создать никак)) Ну и расскажите как бы мне породить новый класс от класса "Документ.ПриходнаяНакладная"? Скопировать, это не породить. Новый класс должен содержать все свойства и методы родителя, плюс мы добавим свои.
Я бы назвал 1С "Объектным" языком, а вот с "ориентированностью" соглашаться бы не стал.
Это не говорит о том, что язык плох, широкое распространение ПО 1С говорит об обратном, просто как факт.
Ну, попробуйте создать объект абстрактного класса. Только не говорите, что абстрактный класс не может быть базовым.
Я изучал ООП на языке Pascal в середине 199х. Там можно было создать объект любого типа.
Я допускаю, что есть языки в которых можно создать "абстрактный" класс. И смысл в этом есть. Но во всех этих языках от класса можно создать новый класс, который "наследует" все свойства и методы родителя и от новосозданного класса можно создать ещё один класс и т.д.
Если мы поменяем что-то в "родительском" классе, перекомпилируем, то все "наследники", не перекрывшие этот метод, изменяться.
Т.е. образно говоря, если меня не устраивает "Документ.ПриходнаяНакладная" по паре методов, я порождаю от него новый "Документ.ПриходнаяНакладнаяНовая", в котором меняю не устраивавшие меня свойства и методы. И после штатного обновления все изменения приходят и в мой объект сами.
В этом суть наследования, в многоуровневости. А не в возможности породить много "классов" от одного "базового абстрактного класса".
В этом суть наследования, в многоуровневости. А не в возможности породить много "классов" от одного "базового абстрактного класса".
Вот в этом и недопонимание. Наследование рассматриваете только как многоуровневое наследование. А наследование это просто возможно наследоваться от другого класса (в том числе абстрактного).
Определение из википедии:
Насле́дование — механизм объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.
Более того, в С++ возможно наследоваться от нескольких классов. Что могло приводить к ошибке неоднозначности.
В Java нет множественного наследования.
Так что понятие Наследование это просто возможность наследования, а не обязательность всего и вся.
В некоторых ЯП класс необходимо специально помечать, чтобы дать возможность от него наследоваться.
Т.е. образно говоря, если меня не устраивает "Документ.ПриходнаяНакладная" по паре методов, я порождаю от него новый "Документ.ПриходнаяНакладнаяНовая", в котором меняю не устраивавшие меня свойства и методы. И после штатного обновления все изменения приходят и в мой объект сами.
Под это подходит возможность расширения )
Но в любом случае, я не считаю, что в 1С используется ООП. Есть отдельные элементы, но в общем именно ООП - нет.
Вот в этом и недопонимание. Наследование рассматриваете только как многоуровневое наследование...
Операция "Наследование" или метод программирования "наследование"? Для операции да, определение википедии подходит.
А для метода никак: движение вперёд может быть только с многоуровневым наследованием - когда под новые задачи создаётся новый объект, имеющий свойства и методы старого + добавляет что-то своё. Так что программная среда, в которой наследование возможно только от абстрактного, имеющего несколько примитивных свойств и несколько пустых методов (таких, что даже их вызов в "наследнике" не имеет смысла) не может считаться имеющей механизм наследования.
...В некоторых ЯП класс необходимо специально помечать...
В большинстве случаев, это для защиты авторских прав. Если хочешь породить свой объект, от моего скомпилированного - делись))
...Под это подходит возможность расширения...
Да, я уже где-то говорил, что расширения - убогая попытка решить проблему наследования в 1С.
Но это вторая попытка, более успешная чем первая.
...я не считаю, что в 1С используется ООП. Есть отдельные элементы, но в общем именно ООП - нет
(16)Ну начинал то и я с 3-го. Там не было объектов. По данным википедии в версии 5.5 появились, но я 5.5 не видел).
Я в 6.0 сталкивался. И оболочка к Pascal была написана на Turbo Vision.
Так я не мериться хотел. Просто мог какой-то термин употребить не так. Например, термина "class" в Pascal не было.