Имя: Пароль:
1C
 
Как можно аргументировать, то что 1С язык высокого уровня
0 фттуе-ьф
 
08.11.05
22:36
Дорогие товарищи))))
Как можно аргументировать, то что 1С язык высокого уровня
Заранее благодарю!
1 izabella
 
08.11.05
22:43
Не знаю поможет ли тебе то что ниже написано, но усе таки почитай...а вдруг...?-)
Говоря о Конфигураторе, нельзя не отметить встроенный язык программирования, который предназначен для описания алгоритмов функционирования прикладной задачи. Он является предметно-ориентированным, объектным языком высокого уровня. Его основу составляют всевозможные объекты и конструкции, свойственные данной предметной области. Кроме того, язык имеет процедурную технологию программирования. Это значит, что программа на этом языке представляет собой последовательность процедур и функций для обработки данных. При своей относительной простоте язык обладает некоторыми важнейшими  объекто-ориентированными свойствами, например, правила доступа к атрибутам и методам специализированных типов данных (константам, справочникам, документам и т.д.) совпадают со свойствами и методами объектов, используемых в других объектно-ориентированных языках. Однако специализированные типы данных (такие как, например, документы) не могут определяться при помощи самого языка, а должны задаваться в визуальном режиме Конфигуратора, что является важным отличием от других объектно-ориентированных языков.
2 фттуе-ьф
 
08.11.05
22:46
Уважаемая    izabella!
Большое спасибо)))
И вот вопрос назрел, откуда информация такая?
Очень нужная...
Хотелось бы развить...
3 izabella
 
08.11.05
22:49
Информация из учебника по программированию ,автор Усиков...я бы тебе целый раздел отсканировала,но книгу на работе забыла...сорри...тока завтра если...
4 фттуе-ьф
 
08.11.05
22:57
Уважаемая  izabella!
Извини за наглость, но она искупается необходимостью.
Если сможете, огромная просьба - все что есть по этой тематике скиньте, пожалуйста на annet-ma@yandex.ru.
Информация просто необходима, до конца недели.
С огромной благодарностью annet-ma
5 izabella
 
08.11.05
22:58
хорошо постараюсь завтра отсканить и прислать
6 Camino
 
модератор
08.11.05
23:37
Насколько я помню, языки программирования различаются по уровню логики:
1. Язык низкого уровня (машинного) - ассемблер
2. Все остальные языки являются языками высокого уровня априори.
7 smaharbA
 
08.11.05
23:38
Язык самого высокого уровня въетнамский... "переход" тона влияет на значение...
8 фттуе-ьф
 
08.11.05
23:57
Если быть точнее...
Как можно аргументировать, то что 1С язык высокого уровня и объектно-ориентированный
9 Guk
 
09.11.05
00:05
(8) Про ООП сложно будет аргументировать. Я бы не смог...
10 Guk
 
09.11.05
00:06
+(9) Я говорю естесственно про штатный язык...
11 avm-nn
 
09.11.05
00:29
посмотри признаки в любом учебнике объектно-ориентированного языка, лучше классику по С++ возьми. Что там: полиморфизм, инкапсуляция, ... уже и смысла этих понятий не помню и увидишь, что многое есть в 1С.
12 Guk
 
09.11.05
00:33
(11) Ну полиморфизм допустим есть, инкапсуляция статическая, наследования просто нет...
13 Guk
 
09.11.05
00:35
+(12) А ОО язык предполагает наличие всех трех признаков, и в полном объеме...
14 avm-nn
 
09.11.05
00:41
(13) Так я и предлагаю Автору разобраться самому. А объектно-ориентированность 1С действительно не полная, но элементы ее присутствуют.
15 фттуе-ьф
 
09.11.05
00:43
Всем спасибо за отзывчивость, что-нибудь сочиню при защите...Но что-то стало проясняться))))
Спокойной всем ночи!!!!
16 Волшебник
 
модератор
09.11.05
07:41
см. также:
1С - это СУБД или нет?
http://www.mista.ru/subscribe/74.htm
17 Волшебник
 
модератор
09.11.05
07:47
(12) Есть наследование от предопределенных классов платформы и только однократное. Например, "справочник Номенклатура" - потомок класса "Справочник".
18 LOSS
 
09.11.05
07:49
17 непгавильно
19 Волшебник
 
модератор
09.11.05
07:49
(18) А как правильно?
20 LOSS
 
09.11.05
07:50
17 дайте определение наследования. и вы поймете что вы не правы
21 Волшебник
 
модератор
09.11.05
07:53
(20) Наследование - это создание класса-потомка, обладающего признаками класса-родителя, т.е. содержащего его свойства, методы, события.

Если классов-родителей несколько, то это множественное наследование. Есть определенные классы (final), от которых нельзя создавать потомков. Обычно все классы в системе наследуются от одного корня, который называется Object или аналогично.

Разработчик платформы создал класс "Справочник", наделил его свойствами и методами, например, метод "ВыбратьЭлементы". Когда мы создаем класс "Номенклатура", он наследует этот метод и мы можем им пользоваться.
22 LOSS
 
09.11.05
07:57
наследование это есть точное повторение признаков родителя. Чем не обладает Ваш "Справочник"
23 Волшебник
 
модератор
09.11.05
07:59
(22) И какой признак наследуется не точно?
24 Иде я
 
09.11.05
08:01
(23) А какой признак наследуется точно ? Кроме галок на права :)
25 LOSS
 
09.11.05
08:02
23 ой дай отдохнуть мне. не хочу мыслить
26 AAAChel
 
09.11.05
08:38
Уважаемый Волшебник, вопрос наследования в случае 1с носит чисто условный характер. Можно конечно сказать, что Номенклатура наследует базовые классы объекта метаданных "Справочник", но это так натянуто. А что делать не с методами, а с параметрами??? Нет никакого наследования, а есть предопределенные классы "Справочник", "Документ" и мы из них создаем объекты.
27 Rovan
 
гуру
09.11.05
08:46
(24) Все методы наследуются и поля (Код, Наименование, Родитель)
28 Rovan
 
гуру
09.11.05
08:48
(26) Назовем это "Одноступенчатое наследование"
29 Теорема
 
09.11.05
09:08
Все, что не Ассемблер - является ЯВУ.

1С - является языком сверхвысокого уровня(в контексте платформы).

1С++ - объекто-ориентированное расширение языка 1С.

Поэтому утверждение:
1С с примочками - это объектно-ориентированнный язык сверхвысокого уровня.
1С Предприятие с примочками - это ультрапродуктивная среда разработки приложений баз данных для решения учетно-экономических задач.
30 AAAChel
 
09.11.05
09:22
(29)C++ - является объектно-ориентированным языком.
1С - не является и не может являться таковым:
Наследование - нет (странное наследование кода и наименование, они не наследуются, а создается объект уже существующего класса "Справочник")
Полиморфизм - нет
Инкапсуляция - частично

Если бы в 1с было наследование, и можно было создавать формы как производные от других (базовых), вот тогда не надо было бы повторять огромные куски кода по зачету аванса в десятке документов.
31 Парижская фанера
 
09.11.05
09:24
(26) Учите мат. часть. Есть абстрактный класс "Справочник" от него наследуем класс "Справочник.Номенклатура".
32 Парижская фанера
 
09.11.05
09:24
(+31) Что вызывает проблемы не пойму.
33 Волшебник
 
модератор
09.11.05
09:25
(26) Объекты - это уже:

СпрНоменклатура1 = СоздатьОбъект("Справочник.Номенклатура");
СпрНоменклатура2 = СоздатьОбъект("Справочник.Номенклатура");

А я говорю именно про классы.

(30) Предлагаю рассматривать объектно-ориентированность именно как ОРИЕНТИРОВАННОСТЬ, т.е. в бОльшей или меньшей степени. Есть разные степени приближения к полностью объектному языку.
34 Guk
 
09.11.05
09:27
(30) А разве например метод ВыбратьСтроки() для документа и ТЗ, это не полиморфизм?...
35 Теорема
 
09.11.05
09:27
1C c примочками - это 1С + 1С++ - вполне объектно-ориентированный язык.

Вот сейчас разрабатываю довольно некислую иерархию классов.
36 LOSS
 
09.11.05
09:30
33 чего молчал тогда
37 LOSS
 
09.11.05
09:30
дайте кто нибудь понятие ОБЪЕКТА
38 Волшебник
 
модератор
09.11.05
09:33
(37) В разных языках разная терминология:
1) Например, в С есть "класс", а есть "объект" (или экземпляр класса)
2) В ObjectPascal есть "объект" (как класс в С), а есть экземпляр объекта.

В общем случае, объект - это сущность, обладающая сходством с другими объектами своего класса (общие признаки и поведение) и уникальностью (идентификатор, конкретный набор свойств).
39 Волшебник
 
модератор
09.11.05
09:35
Объект (класс) чем-то аналогичен понятию модуль (они из них выросли). Он скрывает в себе какую-то функциональность (довольно большую) и имеет внешний (публичный) интерфейс для доступа к этой функциональности.
40 LOSS
 
09.11.05
09:35
38 вот теперь тематично и актуально. А какое  официальное определение дает фирма 1С?
41 Волшебник
 
модератор
09.11.05
09:38
(40 Официально фирма 1С не называет свой язык объектно-ориентированным, чтобы не вовлекаться вот в такие "священные войны". ИМХО, конечно.
42 ДенисЧ
 
09.11.05
09:41
Я не понял про инкапсуляцию. Где она в 1с? Нету её...
43 ДенисЧ
 
09.11.05
09:41
Я бы сказал, что 1с - объектный язык, а не ориентированный :-) Типа VB до дотнета.
44 Волшебник
 
модератор
09.11.05
09:45
(42) Инкапсуляция - это самое простое. Это объединение свойств и методов их изменяющих в одном классе (объекте). В 7.7 и 8.0 это сплошь и рядом.

(43) Объектный - это как раз предел для объектно-ориентированных языков, т.е. когда "всё есть объект" (как в Java или .Net).
45 ДенисЧ
 
09.11.05
09:47
(44) ТОгда почему частичная И.?
А "объектный" - это определение я видел в какой-то книге (давно, потому не помню, где) для языкав, коиторые только используют готовые классы и не могут создавать свои.
46 Волшебник
 
модератор
09.11.05
09:49
(45) ИМХО, плохое определение. По смыслу совсем наоборот. Если язык объектный, то он поддерживает все принципы объектно-ориентированного программирования и НЕ позволяет их ИГНОРИРОВАТЬ.
47 Guk
 
09.11.05
09:50
(45) Частичная, потому что не наращиваемая для конкретного объекта. Поэтому я и назвал её статической...
48 ДенисЧ
 
09.11.05
09:50
(46) Может быть, и плохое. Книга была старая, начала 90-х, когда термины ООзП ещё не устоялись.
49 ДенисЧ
 
09.11.05
09:51
(47) опа... В в каком языке инкапсуляцию можно "нарастить" для конкретного класса? Не наследуясь от него...
50 Волшебник
 
модератор
09.11.05
09:54
Кстати, в 1С 8.0 у объектов можно создавать экспортные переменные/процедуры/функции в модулях объектов и они становятся видны снаружи, как обычные свойства и методы объекта. Об этом я писал еще в 2002 году:
http://www.mista.ru/subscribe/15.htm
51 ДенисЧ
 
09.11.05
09:57
(50) Но ведь такое добавление свойств и т.д. всё равно статическое (по выражению ГУКа)
52 Волшебник
 
модератор
09.11.05
09:57
(51) Я не понимаю это выражение.
53 ДенисЧ
 
09.11.05
09:58
(52) Я тоже :-)
54 AAAChel
 
09.11.05
10:07
Господа, товарищи. Спор наш несколько бессмысленный. Ведь мы спорим куда отнести 1с, а не про то, чем она обладает.

VFP (Visual FoxPro) - создаю класс кнопки "Button1" , на основе типового класса "Button". Прописываю ее функциональность. Записываю ее как новый класс. Создаю на основе  "Button1"  еще один класс "Button2". Он наследует все свойства "Button2", ВСЕЕЕ, и которые я добавил в "Button1", а не только базовые из конструктора. Мне не нравится что-то, я перепишу только это, мне доступны и свои методы и методы родителей.
А вы говорите про наследование "ВыбратьЭлементы()". Я соглашусь, что "Справочник" - абстрактный класс, а "Номенклатура" - конкретный. Но какие методы мы можем переопределить или добавить новые?? В этом весь кайф ООП.
А остальное-пустые разговоры.
В VFP - создаешь базовую форму с достаточно богатым набором свойств и наследуй от нее, все новые формочки будут вести себя также как и она, если ты не переопределишь какой-то метод.
55 Волшебник
 
модератор
09.11.05
10:08
(54) В 8.0 можно добавлять свойства и методы. Читай 50-й пост.
56 AAAChel
 
09.11.05
10:13
Я все сказанное относил к семерке. Ну можно в 8-ке создавать видимый метод, и что дальше?? В чем здесь наследование???
57 Волшебник
 
модератор
09.11.05
10:15
(56) Спр. Номенклатура - наследник класса "Справочник" + мы можем добавить ему свойств и методов. Черты объектно-ориентированности.
58 Rovan
 
гуру
09.11.05
10:20
(56) На форуме часто появляется вопрос
"Как 7-ке можно вызвать функцию из модуля формы объекта ?"
и ответ на него есть, оно работает - правда не так красиво как 8-ке
59 AAAChel
 
09.11.05
10:23
Можно и в уродине черты красавицы разглядеть. Каждый видит то, что хочет видеть. Пусть в 1с будут черты ООП или не будут, от этого ничего не изменится. Все равно при внесении фирмой 1С изменений в как Вы сказали наследник класса "Справочник" изменений, и при наличии в нем наших, нам опять придется глазками и ручками синхронизировать наши и их изменения, а нет, чтобы этот самый класс просто бы унаследовал новые свойства. Вот в этом и всё дело, а черты они и есть черты. И в Запорожце есть черты БМВ
60 AAAChel
 
09.11.05
10:25
(58) Я прекрасно знаю как вызвать метод формы из другой формы или модуля.
61 Волшебник
 
модератор
09.11.05
10:26
(59) Совершенно верно. И в телеге тоже есть черты БМВ. А английское слово "car" вообще переводится как "телега".
62 AAAChel
 
09.11.05
10:32
Поэтому я и говорю, что наш спор абсолютно бессмысленный. Каждый может отнести туда, куда хочет. Но если говорить точно, то есть четкие определения, и платформа либо удовл им, либо нет. Вот и всё. Никто ведь не скажет, что у С++ есть черты ООП, или у Paslal, хотя в нем нет множественного наследования, и вообще классическим языком ООП является SmallTalk (может немножко и не так пишется, я уже не помню)
63 Волшебник
 
модератор
09.11.05
10:36
(62) Я говорю о степени приближения к полностью объектному языку (платформе). Нет такого: удовлетворяет или нет. Есть лишь градации. Язык/платформу 1С:Предприятия тоже можно расположить на этой шкале и она будет более или примерно также объектно-ориентирована, по сравнению с такими языками, как PL/SQL или VB 6.0.
64 Волшебник
 
модератор
09.11.05
10:40
(62) У С++ есть именно ЧЕРТЫ объектной техники, именно поэтому он называется объектно-ориентированным, а не объектным. Была когда-то попытка сделать полностью объектный С, он так и назывался Object C, но он не прижился. С++ не является полностью (максимально) объектно-ориентированным, потому что позволяет программировать в старом стиле (для сохранения совместимости), т.е. игнорируя принципы объектной техники.

Флагманом же объектно-ориентированности следует считать платформу .Net (С#) и Java. Это наиболее приближенные к объектной технике языки из наиболее известных и используемых (именно из распространенных!).
65 ДенисЧ
 
09.11.05
10:43
(64) "С++ не является полностью..." - ну-ка поподробней :-) Что именно там не полностью?
66 Волшебник
 
модератор
09.11.05
10:43
(64)+ или Objective C, точно не помню.
67 AAAChel
 
09.11.05
10:43
(63) Я, увы, не слышал про градации соответствия ООП. Про то, что будет рядом с VB 6.0 абсолютно согласен. Но не соглашусь, что нет: удовлетворяет или нет.
68 Волшебник
 
модератор
09.11.05
10:43
(65) Например, числа и строки (примитивные типы данных) не являются объектами.
69 ДенисЧ
 
09.11.05
10:44
(68) А где сказано, что должны?
70 Волшебник
 
модератор
09.11.05
10:44
(68)+ А в платформе .Net являются. Используется специальная техника boxing/unboxing
71 ДенисЧ
 
09.11.05
10:44
+69 и чем std::string не объект?
72 AAAChel
 
09.11.05
10:45
(64) Уберите лучше  это, чтобы никто не видел
73 Волшебник
 
модератор
09.11.05
10:45
(69) В полностью объектных языках действует строгое правило: "всё есть объект". Этот принцип был заложен в Java и перекочевал оттуда в .Net.
74 AAAChel
 
09.11.05
10:46
(65) А числа и строки обязаны быть объектами? это примитивные типы
75 ДенисЧ
 
09.11.05
10:46
(70) Не являются там примитивы (int и т.д.) объектами... А боксинг/анбоксинг ли переводит их в System.Int32 и подобные.
76 Волшебник
 
модератор
09.11.05
10:46
(74) хе-хе.... Вот мы и подобрались к главному: кто устанавливает главные критерии ООП? А судьи кто?
77 Волшебник
 
модератор
09.11.05
10:47
(75) С точки зрения программиста являются. А как это реализовано технически - дело десятое (инкапсулированное).
78 AAAChel
 
09.11.05
10:47
Мы вроде говорили не о полностью объектных моделях, а о языках, в которых полностью реализована концепция ООП
79 Волшебник
 
модератор
09.11.05
10:48
(78) А где она эта концепция? Она в умах людей. Следовательно она живая и со временем меняется.
80 LOSS
 
09.11.05
10:50
Десткий сад. Объектность есть наличие свойств
81 AAAChel
 
09.11.05
10:51
(77) Вы сами себе противоречите, если нет критериев ООП, то как же можно произвести градацию платформ??:)) И если Вы перевели разговор в плоскость ущербной реализации ООА в С++, то что тогда останется от милых черт в 1С?
83 Guk
 
09.11.05
10:53
(50) Именно это я имел ввиду. В 77 кто-нибудь умеет добавлять штатно новые свойства и методы к существующим объектам?...
84 ДенисЧ
 
09.11.05
10:53
(77) да, забыл, что int.ToString() сработает...
87 Волшебник
 
модератор
09.11.05
10:55
(81) Критерии есть, но они не булевые: да/нет, ООП/неООП. Есть лишь стремление к объектной технике, движение к совершенству.
89 AAAChel
 
09.11.05
10:58
(81)Пусть будет по Вашему. В конце концов Вы ж Модератор и Волшебник.
90 Композитор
 
09.11.05
10:59
Ветку не читал.

1С нельзя делать объектно-ориентированной.
91 Волшебник
 
модератор
09.11.05
11:00
(90) Уже.
92 LOSS
 
09.11.05
11:00
89 нормальный он. доказывает же и тебе рот не затыкает
93 Композитор
 
09.11.05
11:00
Я отстал от жизни.
94 romix
 
09.11.05
11:15
(73) Жалко, что в 1С не сделали строгую типизацию, и все свойства и методы с доступом "через точку". Это помогает изучению платформы, т.к. правильно работают вещи типа Intellisence, и меньше косяков с типизацией (когда надо долго думать, почему не работает код). Реквизиты объектов, форм и прочего тоже хотелось бы через точку, чтобы все (или многие) имена не находились в одном большом глобальном контексте (с точки зрения процедуры модуля). Т.е. это не усложнение, а намного все упрощает и для новичков, и для профессионального программирования.
95 Гламурный Подонок
 
09.11.05
11:16
(94)Тогда бы стоимость продукта выросла.
96 Волшебник
 
модератор
09.11.05
11:17
(94) В языке 1С принципиально сделана мягкая типизация, т.е. тип переменной определяется по ее значению. Это упрощает программирование. В VB есть похожий тип "Variant".
97 Эксперт 1С
 
09.11.05
11:22
(94) - в 1С++ есть строгая типизация.
98 romix
 
модератор
09.11.05
11:25
(95) Все не так линейно - если продукт юзает не 100, а 500 новичков, то его стоимость бы даже упала. :-)
99 Rovan
 
гуру
09.11.05
11:26
(94) "Типизацию" в 1С рекомендуется писать прямо в названии пременных и  придерживаться ее нво всех модулях
100 Эксперт 1С
 
09.11.05
11:28
(94) - строгая типизация упрощает обучение (Паскаль), но программировать с ней муторно.
101 romix
 
модератор
09.11.05
11:28
(96) Ну она имхо мягко стелет на самом деле...
Но можно напороться на неправильный тип, и долго думать, почему обнулилось поле, неправильно выполнился экономический расчет и т.п.
102 Волшебник
 
модератор
09.11.05
11:28
(99) Лично я не рекомендую так делать. Префиксы усложняют чтение программного кода.
103 romix
 
модератор
09.11.05
11:31
(100) Зато правильно работает автозавершение (Intellisence)...
(102) У нас используется даже двойная префиксация.
OpenConf: пишем скрипты для конфигуратора 1С 7.7 (статья)
104 romix
 
модератор
09.11.05
11:34
(102) + Можно несколько сгладить эффект, если использовать очень короткие имена локальных переменных. Их длинное написание действительно делает код громоздким.
105 SKrin
 
09.11.05
11:35
(104) ...короткие, но осмысленные!
106 Волшебник
 
модератор
09.11.05
11:35
(103) А тройную не пробовали? Можно много всяких признаков в префикс переменной зашить: тип, область видимости, индекс и т.д.
107 romix
 
модератор
09.11.05
11:37
(105) Я повсеместно юзаю локальные переменные наподобие:
док, спр, тз, сз
Но именно локальные - а глобальные, названия процедур и т.п. должны быть действительно осмысленные и без сокращений.
108 romix
 
модератор
09.11.05
11:39
(106) Тип и область видимости. Для локальных переменных префиксы обл. вид., естественно, не нужны, т.к. их много, и код станет громоздким.
109 AAAChel
 
09.11.05
13:43
У типизации есть и плюсы и минусы. На мой взгляд, типизация в целом полезнее, она дисциплинирует, и мне не кажется, что 1С сознательно на нее пошла. Если уж для вычисления  "И" вычисляются все операнды, хотя бывает все ясно уже на первом условии.
110 romix
 
09.11.05
14:47
(109) Проверил, действительно вычисляет две половинки составного условия:

Функция ааа()
   Сообщить("Вызвана ааа");
   Возврат 10;
КонецФункции

Функция ббб()
   Сообщить("Вызвана ббб");
   Возврат 15;
КонецФункции
//*******************************************
Процедура Выполнить()
   Если (ааа()>0) или (ббб()>0) Тогда
       Сообщить("Условие выполнено");
   КонецЕсли;
КонецПроцедуры


Выводит:
 Вызвана ааа
 Вызвана ббб
 Условие выполнено
111 romix
 
модератор
09.11.05
14:53
(+110) Хотя, ничего страшного я в этом не вижу. Всегда можно исключить ненужные вычисления алгоритмически. А как это сделать неявно, не сильно (не в разы) усложняя парсер "скобочных" выражений, алгоритм лично мне неясен.
112 AAAChel
 
09.11.05
15:17
Страшного ничего конечно, но бывает, что приходится разносить "И" на несколько если, из-за того, что второе условие ошибочно при невыполнении первого:

Если (ПустоеЗначение(Док)=0) И  (Док.Вид() = ТребВид) Тогда

Многие другие трансляторы гораздо умнее.