Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

презентация

.pdf
Скачиваний:
10
Добавлен:
27.05.2015
Размер:
797.74 Кб
Скачать

ЯЗЫК ОПИСАНИЯ ДАННЫХ

PROTOCOL BUFFERS

Подготовила: Студент группы ИСТ - 101, Васюра Анастасия

СОДЕРЖАНИЕ

определение

как это работает

начало работы

файл .proto

пример использования

преимущества и недостатки

ОПРЕДЕЛЕНИЕ

Protocol Buffers -метод сериализации структурированных данных в расширяемом формате, предложенный Google, как альтернатива XML и JSON.

! ! !

КАК ЭТО РАБОТАЕТ

.proto

Message

Message

Code

Generator

Compile &

Deploy

НАЧАЛО РАБОТЫ

Официально поддерживаемые языки: С++, Java, Python. От сторонних разработчиков:Action Script, C, C#, Common Lisp, Haskell, JavaScript, Lua, Matlab, Objective C, Perl, PHP, Ruby,Visual Basic, Delphi

Установочные пакеты под различные ОС code.google.com/p/protobuf/downloads/list

Установка пакета $ ./configure

$ make

$ make check

$ sudo make install

Создание системы классов

$ protoc --cpp_out=. addressbook.proto

ФАЙЛ PROTO

package tutorial; message Person {

required string name = 1; required uint32 id = 2; optional string email = 3;

enum PhoneType { MOBILE = 0; HOME = 1;

WORK = 2;

}

message PhoneNumber { required string number = 1;

optional PhoneType type = 2 [default = HOME];

}

!

repeated PhoneNumber phone = 4;

}

!

message AddressBook {

repeated Person person = 1;

}

ФАЙЛ PROTO

Модификаторы:

required - элемент обязательно присутствует в сообщении.

optional - элемент опционален. Может не присутствовать в сообщении.

repeated - элемент может повторяться в сообщении любое количество раз, включая ноль раз.

{

// Создаем и заполняем первую запись в адресной книге tutorial::Person * person = src_book.add_person(); person->set_name("Alexey Knyazev");

person->set_id(0); person->set_email("knzsoft@mail.ru");

{

tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("+7 927-220-35-67"); pn->set_type(tutorial::Person_PhoneType_MOBILE);

}

{

tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("+7 962-622-31-67"); pn->set_type(tutorial::Person_PhoneType_MOBILE);

}

}

{

// Создаем и заполняем вторую запись в адресной книге tutorial::Person * person = src_book.add_person(); person->set_name("Danilov Dmitry");

person->set_id(1);

{

tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("8 (8452) 43-96-86"); pn->set_type(tutorial::Person_PhoneType_HOME);

}

}

std::string msg;

src_book.SerializeToString(&msg);

JSON

{

"persons":[

{

"Name":"Alexey Knyazev", "Id":0, "Email":"knzsoft@mail.ru", "Phone":[

{

"Number":"+7 927-220-35-67", "Type":0

},

{

"Number":"+7 962-622-31-67", "Type":2

}

]

},

{

"Name":"Danilov Dmitry", "Id":1,

"Email":null,

"Phone":[

{

"Number":"8 (8452) 43-96-86", "Type":1

}

]

}

]

}

XML

<?xml version="1.0" encoding="utf-8"?> <AdressBook >

<persons>

<Person>

<Name>Alexey Knyazev</Name> <Id>0</Id> <Email>knzsoft@mail.ru</Email> <Phone>

<PhoneNumber>

<Number>+7 927-220-35-67</Number> <Type>Mobile</Type>

</PhoneNumber>

<PhoneNumber>

<Number>+7 962-622-31-67</Number> <Type>Work</Type>

</PhoneNumber>

</Phone>

</Person>

<Person>

<Name>Danilov Dmitry</Name> <Id>1</Id>

<Phone>

<PhoneNumber>

<Number>8 (8452) 43-96-86</Number> <Type>Home</Type>

</PhoneNumber>

</Phone>

</Person>

</persons>

</AdressBook>