Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Подскажите начинающему... (число прочтений - 9391 )
Начинающий
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 12. Февраля 2009
Подскажите начинающему...
12. Февраля 2009 :: 17:42
Печать  
Программирую в семерке... Решил изучить, 1С++ сунулся в Инет - для меня не знающего С++ - тяжеловато... Печаль Подскажите, где посмотреть простенькие примеры, чтобы въехать Улыбка, а дальше я уже буду стараться сам разбираться.
Как создать класс - я разобрался, но вот дальше...
Желательно, где попроще объясняется...
Спасибо, всем заранее...
Критику тоже приму со смирением..
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #1 - 13. Февраля 2009 :: 17:58
Печать  
Все зависит от решаемой задачи. Я, например, с классами вообще не работаю. Больше использую прямой доступ к СКЛ + возможности ТурбоМД. 1С++ предоставляет ОЧЕНЬ большие возможности и чем именно воспользоваться каждый выбирает по своим задачам.
  
Наверх
ICQ  
IP записан
 
Начинающий
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 2
Зарегистрирован: 12. Февраля 2009
Re: Подскажите начинающему...
Ответ #2 - 15. Февраля 2009 :: 05:14
Печать  
Задач внедрения в конфу пока не ставлю, так как еще не понимаю принципа построения. Мне нужны простейшие примеры (не важно какие функции они реализуют) для изучения принципов построения классов 1С++.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #3 - 11. Августа 2009 :: 06:30
Печать  
Поддерживаю Начинающего!
Решился освоить ООП 1С++. Взялся писать свою группу классов под конкретную задачу ...

Если после многократного прочтения "Реализация ООП в 1С++" все казалось понятным, то как только начал писать код, все понимание улетучелось ...
А когда потратил пару дней на прочтение всего что здесь про классы пишут, так голова кругом пошла ... До сих пор в себя не могу прийти.

Здорово помогло бы что-нибудь полезное, но не сложное, с наследниками, да чтобы наследник у базового брал, и наоборот ...
« Последняя редакция: 11. Августа 2009 :: 07:35 - simply »  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #4 - 11. Августа 2009 :: 07:34
Печать  
[b]Вопрос по "Вирт()" и "Я()":[/b]
Чтобы получить доступ к артибутам и метовам базового класса необходимо сделать -
[code]База=Я().ПолучитьБазовыйКласс()[/code]
при этом атрибуты будут доступны и на чтение и на записть.
Правильно?

А для чего используется "Вирт()"?
Чтобы получить атрибуты и методы класса-наследника?
[code]Наследник=Вирт().ПолучитьБазовыйКласс()[/code]
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #5 - 11. Августа 2009 :: 09:25
Печать  
[quote author=simply link=1234460554/0#4 date=1249976081][b]Вопрос по "Вирт()" и "Я()":[/b]
Чтобы получить доступ к артибутам и метовам базового класса необходимо сделать -
[code]База=Я().ПолучитьБазовыйКласс()[/code]
при этом атрибуты будут доступны и на чтение и на записть.
Правильно?

А для чего используется "Вирт()"?
Чтобы получить атрибуты и методы класса-наследника?
[code]Наследник=Вирт().ПолучитьБазовыйКласс()[/code][/quote]
1. Вирт() и я() отличаются только для классов, которые являются базовыми классами
2. Вирт(), вызванный в коде базы или кода наследника, всегда вернет экземпляр объекта-наследника, а не базы.
Я(), вызванный в коде базы, вернет объект наследника, а не базы,
а Я(), вызванный в коде наследника, вернет его самого, т.е. также, как и вирт().
3. Я() рекомендую использовать как можно реже, пока лично я знаю его использование только для динамических свойств.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #6 - 11. Августа 2009 :: 11:31
Печать  
[quote author=artbear link=1234460554/0#5 date=1249982706]1. Вирт() и я() отличаются только для классов, которые являются базовыми классами
2. Вирт(), вызванный в коде базы или кода наследника, всегда вернет экземпляр объекта-наследника, а не базы.
Я(), вызванный в коде базы, вернет объект наследника, а не базы,
а Я(), вызванный в коде наследника, вернет его самого, т.е. также, как и вирт().
3. Я() рекомендую использовать как можно реже, пока лично я знаю его использование только для динамических свойств.[/quote]
В моем первом опыте освоения ООП 1С++ ситуация следующая:
В коде базы есть открытая переменная с установленным значением. В коде наследника мне нужно получить ее.
В Конструкторе я не смог получить ее.
За то в методе наследника я сделал следующее:
[code]Функция ОтправитьЕМаил(Параметры) Экспорт
     Если ПустоеЗначение(оПочта)=1 Тогда
           глИнформация("Ошбика! Объект РомМаил не создан!","Класс",ИмяКласса);
           Возврат 0;
     КонецЕсли;
     База=Я().ПолучитьБазовыйКласс();
     АдресПолучателя=База.АдресПолучателя;
     // Проверим неопределенное количество параметров
     Если ПустаяСтрока(Параметры)=0 Тогда // "{СписокФайлов,АдресПолучателя}"
           спПарам=Я().ПолучитьСписокПараметров("ОтправитьЕМаил");
           Если спПарам.РазмерСписка()>0 Тогда
                 ПолучитьСвойстваКласса(спПарам); // моя процедура, перебирающая все свойства (переменные) класса по методу СписокЗначений.Получить("ИмяСвойства")
           КонецЕсли;
           спПарам=Пусто;
     КонецЕсли;
...
КонецФункции[/code]
Это все, что я уже успел отладить. Так работает.
Но такое предчувствие, что делаю не правильно ...

Всю мою идею (для чего я так стараюсь) разворачивать нужно? :)
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #7 - 11. Августа 2009 :: 11:43
Печать  
Посмотрел в Отладчике:

В Конструкторе базы возвращается:
Вирт() - объект-наследник;
Я() - сама база.

В Конструкторе наследника возвращается:
Вирт() - сам наследник;
Я() - он же.

В коде наследника:
Вирт().ПолучитьБазовыйКласс("ИмяБазы") - возвращает ошибку;
Я().ПолучитьБазовыйКласс() - возвращает базу.
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #8 - 11. Августа 2009 :: 11:53
Печать  
"Открытая переменная" в коде базы - это, надеюсь, переменная с Экспорт ?
Тогда в коде наследника можно и НУЖНО Улыбка к ней обращаться через Вирт().ИмяПеременной, остальное изврат.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #9 - 11. Августа 2009 :: 11:54
Печать  
Лучше постарайся по частям разбить.
Типа 1) работа с переменными базы в наследнике, 2) работа с переменным числом параметров и т.д.
Разработку веди по частям, к следующей части переходи, когда разберешься и оттестируешь текущую Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #10 - 11. Августа 2009 :: 12:38
Печать  
artbear писал(а) 11. Августа 2009 :: 11:53:
"Открытая переменная" в коде базы - это, надеюсь, переменная с Экспорт ?
Тогда в коде наследника можно и НУЖНО Улыбка к ней обращаться через Вирт().ИмяПеременной, остальное изврат.

Да, Экспорт.

artbear, пожалуйста, подскажи, как правильно мне получить параметры базового класса и восспользоваться его методами.
И как правильно это делать если у меня 3 класса, а нужно из последнего наследника (№3), восспользоваться параметрами и методами самого первого класса (№1).

Уточнение:
И в коде базы и в коде наследника есть переменная "АдресПолучателя".
Если в базе она Экспорт, а в наследнике - нет, то Вирт().АдресПолучателя в наследнике получает "ошибку".
Если в обоих кодах они Экспорт - то получаю значение переменной наследника. Это нормально (кажется начинаю понимать).
А как тогда получить значение "АдресПолучателя" из базы?

Просьба 2: где то читал, что можно обратиться к закрытым переменным другого класса, а как не помню. Или лучше такого не делать, а сразу открыть все нужное?

Заранее спасибо!
« Последняя редакция: 11. Августа 2009 :: 14:35 - simply »  
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #11 - 11. Августа 2009 :: 16:00
Печать  
simply писал(а) 11. Августа 2009 :: 12:38:
artbear писал(а) 11. Августа 2009 :: 11:53:
"Открытая переменная" в коде базы - это, надеюсь, переменная с Экспорт ?
Тогда в коде наследника можно и НУЖНО Улыбка к ней обращаться через Вирт().ИмяПеременной, остальное изврат.

Да, Экспорт.

artbear, пожалуйста, подскажи, как правильно мне получить параметры базового класса и восспользоваться его методами.
И как правильно это делать если у меня 3 класса, а нужно из последнего наследника (№3), восспользоваться параметрами и методами самого первого класса (№1).


Сам(Контекст).ИмяПараметра
Сам(Контекст).ИмяМетода()

Вместо Сам(Контекст), Артур видимо будет призывать тебя писать Вирт() - наверно можно и так Улыбка


simply писал(а) 11. Августа 2009 :: 12:38:
Уточнение:
И в коде базы и в коде наследника есть переменная "АдресПолучателя".
Если в базе она Экспорт, а в наследнике - нет, то Вирт().АдресПолучателя в наследнике получает "ошибку".
Если в обоих кодах они Экспорт - то получаю значение переменной наследника. Это нормально (кажется начинаю понимать).
А как тогда получить значение "АдресПолучателя" из базы?

Сам(Контекст).ПолучитьБазовыйКласс("ИмяБазы").АдресПолучателя

Как это делать через Вирт() или я() - вопрос к Артуру, тут я не спец нифига.

simply писал(а) 11. Августа 2009 :: 12:38:
Просьба 2: где то читал, что можно обратиться к закрытым переменным другого класса, а как не помню. Или лучше такого не делать, а сразу открыть все нужное?

В 1С++ это в принципе невозможно. Сразу открывай все нужное.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #12 - 11. Августа 2009 :: 16:06
Печать  
fez писал(а) 11. Августа 2009 :: 16:00:
simply писал(а) 11. Августа 2009 :: 12:38:
Уточнение:
И в коде базы и в коде наследника есть переменная "АдресПолучателя".
Если в базе она Экспорт, а в наследнике - нет, то Вирт().АдресПолучателя в наследнике получает "ошибку".
Если в обоих кодах они Экспорт - то получаю значение переменной наследника. Это нормально (кажется начинаю понимать).
А как тогда получить значение "АдресПолучателя" из базы?

Сам(Контекст).ПолучитьБазовыйКласс("ИмяБазы").АдресПолучателя


Но вообще таких вещей лучше не делать до тех пор, пока ты точно не будешь знать, зачем тебе это нужно.
Ибо Наследование (одна из концепций ООП) плавно предполагает наличие Полиморфизма (другая концепция ООП). А когда ты вот так вот без спроса лезешь в переопределенный параметр - ты разрушаешь обе эти концепции.

Нужно иметь достаточно веские основания, чтобы делать именно так. Полагаю, что у такого новичка, как ты - их нет.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите начинающему...
Ответ #13 - 12. Августа 2009 :: 03:36
Печать  
fez писал(а) 11. Августа 2009 :: 16:00:
Сам(Контекст).ИмяПараметра
Сам(Контекст).ИмяМетода()

Вместо Сам(Контекст), Артур видимо будет призывать тебя писать Вирт() - наверно можно и так Улыбка

Да, Вирт() и выглядит проще, и работает реально шустрее, чем Сам(Контекст) Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Подскажите начинающему...
Ответ #14 - 12. Августа 2009 :: 06:38
Печать  
Большое спасибо fez и Артуру!!!

Да, я новичек. Только взялся осваивать ООП. Но ведь и вы когда-то начинали!
Поэтому сейчас я задаю вам (пусть и глупые) вопросы, чтобы с самого начала понять как правильно, не правильно я сам научусь Улыбка

Теперь по-порядку:

1) как для начинающего, разъяснительной инфомации крайне не достаточно. Он-лайн документация написана для тех, кто уже сделал что-либо работающее с применением С++, Visual FoxPro или любого другого языка ООП.

2) fez писал(а) 11. Августа 2009 :: 16:06:
Но вообще таких вещей лучше не делать до тех пор, пока ты точно не будешь знать, зачем тебе это нужно.
Ибо Наследование (одна из концепций ООП) плавно предполагает наличие Полиморфизма (другая концепция ООП). А когда ты вот так вот без спроса лезешь в переопределенный параметр - ты разрушаешь обе эти концепции.

Нужно иметь достаточно веские основания, чтобы делать именно так. Полагаю, что у такого новичка, как ты - их нет.

Согласен полностью! Оснований нет. Было полное непонимание ООП (сечас я не на много выше, но уже не так страшно) Улыбка
Первое усвоеное правило ООП - все открытые атрибуты и методы базовых классов доступны в наследниках как-будто это их атрибуты и методы, но через функцию Вирт(). Поэтому они и называются - виртуальными (экспортированными).
Я правильный вывод сделал?

3) Получается, что до меня доходит концепция наследования. Но тогда я вообще потерялся с Полиморфизмом  Ужас. Теория вроде понятна, а на деле ...
Может открыть новую тему по вопросам для разъяснения тех или иных моментов он-лайн документации?

4) вирт().ПолучитьБазовыйКласс() заработал после того, как очистил оба кода классов от лишних (совпадающих) атрибутов.

5) В Отладчике периодически ругается на Вирт() - функция "Вирт()" не обнаружена, ошибки при открытии класса. Как лечить?

6) fez писал(а) 11. Августа 2009 :: 16:00:
simply писал(а) 11. Августа 2009 :: 12:38:
Просьба 2: где то читал, что можно обратиться к закрытым переменным другого класса, а как не помню. Или лучше такого не делать, а сразу открыть все нужное?

В 1С++ это в принципе невозможно. Сразу открывай все нужное.

Очень жаль ... Значит я прочитал это в книгах по С++ или Visual FoxPro.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать