Ознакомьтесь с нашей политикой обработки персональных данных
  • ↓
  • ↑
  • ⇑
 
Записи с темой: ооп (список заголовков)
00:45 

Ликуем!

Настоящий дворянин и программист
Товарищи. Я вам ничего не говорил, но хотел бы указать на один любопытный подкаст, слушать который нужно с отметки 16:10

@темы: , ООП

22:20 

Почему объектно-ориентированное программирование провалилось?

Настоящий дворянин и программист
Ссылка на интересный обзор с интересными ссылками на классику и классиков.

Итак...

Почему объектно-ориентированное программирование провалилось?

@темы: ООП, ссылка

23:04 

XDTO-пакеты, xml, xml schema

Настоящий дворянин и программист

@темы: , xml, ООП

00:56 

XDTO-пакеты. Неименованные типы

Настоящий дворянин и программист
В продолжение к посту XDTO-пакеты, xml, xml schema несколько слов о неименованных типах.



Давайте посмотрим, что будет, если в конструкторе XDTO-пакета к свойству добавить определение типа и, в свою очередь, добавить туда еще свойств:





Как видите, свойства "Адрес" и "Телефон" сложного типа ("ОбъектXDTO"). А телефон еще и списковый тип (я задал "Максимальное количество" равное трем).






Вот XML-схема этого пакета:


< xs:schema xmlns:tns="www.1c.ru/demos/products"
xmlns:xs="www.w3.org/2001/XMLSchema"
targetNamespace="www.1c.ru/demos/products"
attributeFormDefault="unqualified" elementFormDefault="qualified">
< xs:complexType name="Клиент">
< xs:sequence>
< xs:element name="Фамилия" type="xs:string"/>
< xs:element name="Имя" type="xs:string"/>
< xs:element name="Адрес">
< xs:complexType>
< xs:sequence>
< xs:element name="Город" type="xs:string"/>
< xs:element name="Улица" type="xs:string"/>
< xs:element name="Дом" type="xs:int"/>
< /xs:sequence>
< /xs:complexType>
< /xs:element>
< xs:element name="Телефон" maxOccurs="3">
< xs:complexType>
< xs:sequence>
< xs:element name="КодГорода" type="xs:string"/>
< xs:element name="Номер" type="xs:string"/>
< xs:element name="Добавочный" type="xs:string"/>
< /xs:sequence>
< /xs:complexType>
< /xs:element>
< /xs:sequence>
< /xs:complexType>
< /xs:schema>


Вот код, который создает объект этого типа:


    клиентТип = ФабрикаXDTO.Тип("www.1c.ru/demos/products", "Клиент");
клиент = ФабрикаXDTO.Создать(клиентТип);




При создании объекта типа "Клиент" мы получим следующую картину:





Заполнить реквизиты "Фамилия" и "Имя" несложно:


    клиент.Фамилия = "Нуралиев";
клиент.Имя = "Борис";


Телефоны рассмотрим немного позже, а вот как заполнить реквизит "Адрес"? По логике, это нужно сделать как в примере с номенклатурой и единицами измерения из предыдущей статьи. Создать "ОбъектXDTO" с типом таким же, как у свойства "Адрес". Но у этого типа нет самостоятельного имени, а значит, вызвать "ФабрикаXDTO.Тип(...)", чтобы получить этот самый тип, не получится. Но это не значит, что самого типа нет. Просто он содержится в типе "клиентТип". Давайте посмотрим на него более внимательно:





Как видите, имени у типа нет, но сам объект "ТипОбъектаXDTO" существует. Значит, адрес мы можем заполнить вот таким кодом:


    клиент.Адрес = ФабрикаXDTO.Создать(клиентТип.Свойства.Получить("Адрес").Тип);
клиент.Адрес.Город = "Москва";
клиент.Адрес.Улица = "Селезневская";
клиент.Адрес.Дом = 21;


Теперь и с телефонами ситуация проясняется. Свойство "Телефон" имеет тип "СписокXDTO", а синтакс-помощник говорит, что у этого типа есть метод "Добавить", которому передается "ОбъектXDTO". Вот код, который добавляет телефоны:


    телефонТип = клиентТип.Свойства.Получить("Телефон").Тип;

нТелефон = ФабрикаXDTO.Создать(телефонТип);
нТелефон.КодГорода = "495";
нТелефон.Номер = "737-92-57";
нТелефон.Добавочный = "*0";
клиент.Телефон.Добавить(нТелефон);

нТелефон = ФабрикаXDTO.Создать(телефонТип);
нТелефон.КодГорода = "495";
нТелефон.Номер = "681-44-07";
нТелефон.Добавочный = "*0";
клиент.Телефон.Добавить(нТелефон);


В итоге я получил вот такой XML:


< ?xml version="1.0" encoding="UTF-8" ?> 
< Клиент xmlns="www.1c.ru/demos/products"
xmlns:xs="www.w3.org/2001/XMLSchema"
xmlns:xsi="www.w3.org/2001/XMLSchema-instance">
< Фамилия>Нуралиев< /Фамилия>
< Имя>Борис< /Имя>
< Адрес>
< Город>Москва< /Город>
< Улица>Селезневская< /Улица>
< Дом>21< /Дом>
< /Адрес>
< Телефон>
< КодГорода>495< /КодГорода>
< Номер>737-92-57< /Номер>
< Добавочный>*0< /Добавочный>
< /Телефон>
< Телефон>
< КодГорода>495< /КодГорода>
< Номер>681-44-07< /Номер>
< Добавочный>*0< /Добавочный>
< /Телефон>
< /Клиент>


Напоследок хочу подарить вам небольшую рекурсивную процедуру, которая заполняет все свойства вот таких неименованных типов, кроме списковых:


// Заполняет все свойства объектов, которые в качестве типа имеют неименованый тип "ОбъектXDTO"
Процедура ЗаполнитьСвойстваОбъектаXDTO(ОбъектXDTO, тФабрикаXDTO)
ТипОбъектаXDTO = ОбъектXDTO.Тип();
Для каждого
СвойствоXDTO Из ТипОбъектаXDTO.Свойства Цикл
флТипНеИменованый = ПустаяСтрока(СвойствоXDTO.Тип.Имя);
флСвойствоНеСписковое = (СвойствоXDTO.НижняяГраница=1) и (СвойствоXDTO.ВерхняяГраница=1);
Если
флТипНеИменованый и флСвойствоНеСписковое Тогда
тЗначениеСвойства = тФабрикаXDTO.Создать(СвойствоXDTO.Тип);
Если
Тип(тЗначениеСвойства) = Тип("ОбъектXDTO") Тогда
ЗаполнитьСвойстваОбъектаXDTO(тЗначениеСвойства, тФабрикаXDTO);
КонецЕсли;
ОбъектXDTO.Установить(СвойствоXDTO,тЗначениеСвойства);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// ЗаполнитьСвойстваОбъектаXDTO


Естественно, вы можете доработать ее по своему вкусу.



На сегодня на этом все, а вам я желаю хорошего дня и хорошего кода.



@темы: , xml, ООП

Green FiLin's blog

главная