![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
AndreyCH |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Есть обыкновенный XML
Есть простой класс назовем его SimpleTag.
Он служит для хранения простых значений и имеет 2 поля (название тэга tagName и его значение tagValue) и какие-то методы обработки их... Для вложенных тэгов нужен класс compoundTag где для значений будет массив объектов того же типа (compoundTag поле tagName = "<nw>" поле tagValue = массив как compoundTag (<core>или<date>)так и SimpleTag (<name> или <pv>) - вот здесь и затруднения. Помогите пожалуйста написать код для класса compoundTag (если можно, то пример как это нужно делать) |
||||
|
|||||
NuINu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 19.7.2008 Репутация: 5 Всего: 6 |
Уважаемый AndreyCH, вы мыслите неверно.
и соответственно ставите задачу не правильно. объяснюсь. то что вы написали это мысли в структурной парадигме, где первичную роль играет структура данных. а вам надо сделать как я понял, объектную иерархию. так вот в объектной парадигме, первичную роль играют то как объекты взаимодействуют друг с другом, т.е на какие вопросы они отвечают какие ДЕЙСТВИЯ они делают. поэтому при определении класса, вы в первую очередь определите МЕТОДЫ, которые должен выполнять ваш объект. из указанных данных не понятно что должен делать SimpleTag, именно ДЕЛАТЬ а не что он будет внутри себя хранить(это дело десятое). и тем более не понятно что будет делать compoundTag. по идее наследования, они чтото должны делать одинаковое. иначе смысла их объединять в одну иерархию нет никакого. поэтому и помочь вам в вашем вопросе, крайне затруднительно. |
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Да-да, Вы абсолютно правы! Хоть мыслю я в правильной парадигме, а вот выразить мысль не сумел.
Итак есть древовидная структура XML (как пример) тэг содержит данные (поле value) и название (поле name) нам нужно эти данные получить (getName и getValue) и установить (setName и setValue) так же тэг может содержать другие тэги внутри (список тэгов: соотвественно методы для работы со списком). ps. ну и как всегда пока отвечал сам понял что же мне нужно. |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
AndreyCH, вы это для собственного развлеения делаете или серьезно ?
Если серьезно, то - это уже сделали за вас. - разработали Document Object Model. Настоятельно рекомендую не ихобретать велосипед и использовать какую либо библиотеку для работы с XML. А вообщем NuINu прав - нужно сначала решить что будут делать ваши классы. Вообще иногда классы строются как раз исходя из соображений, что они хранят (так называемые Data-Object) Ну наприрер класс для хранения Даты. Такие классы как правило делаются Immutable, т.е. содержимое их не может меняться. ну вот простой хотя и бессмысленный пример
|
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Это делается лишь наполовину для собственного развлечения.
![]() XML нужен, чтобы наглядно отображать древовидные данные. Структура задано жестко и никогда не изменится. ![]() Сейчас как раз все реализовано XML::Simple А вот то, что я спросил - это как раз мое обучение ну и для скорости работы. Раз уж так, то есть вопрос: внутри класса XmlSimple нужно поле типа XmlSimple (то есть ссылку на такой же объект, который) как правильно его создать? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
подскажите чем Class::Accessor лучше от обычного ООП bless + перезагрузка? читаю не могу понять чем лучше и где приемущества
все ли это используют? Это сообщение отредактировал(а) gcc - 19.3.2009, 12:58 |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Это вы про что? И какая связь у этого с модулем Class::Accessor, который автоматически генерирует методы аксесоров и мутаторов для ваших классов? -------------------- Died at Life.pl line 21 |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ну а что это такое? в чем разница? или это просто название?
то есть это просто определить на сетер и гетер, наследование контрутора и перезагрузка операторов и всё? в чем приемущестово? Это сообщение отредактировал(а) gcc - 19.3.2009, 14:03 |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
gcc, вы извините, но у вас какой-то набор слов получается в сообщении. Не могу выделить смысловую часть.
Вообще Class::Accessor используется для того, чтобы избавиться от написания однообразных методов типа
для каждого атрибута объекта вашего класса. -------------------- Died at Life.pl line 21 |
|||
|
||||
AndreyCH |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Вот набросал простенький класс... Покритикуйте пожалуйста, может что неправильно, неэффективно написал!
obj.pl
а это его тестик test.pl
|
||||
|
|||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
AndreyCH, в глаза бросилось
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
KSURi, не понимаю...
ну так и что из этого "что он для того, чтобы избавиться от написания однообразных методов типа"? |
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
ginnie, прокомментируйте пожалуйста что именно не так!
Инициализацию в конструкторе $self->{TAGNAME}= "RootXML"; я сделал, только для того что бы проверить как все работает, а вот с ссылкой на массив не очень понимаю... Или его не нужно инициализировать в конструкторе или что не так? ![]() PS. perl ом я занимаюсь для удовольствия - пишу на нем небольшой ресурс. А основная работа у меня на Java (раньше на C++) . Если сказать, что от перла крышу сносит, это не чего не сказать. Непривычно абсолютно ВСЕ! ![]() ![]() |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
AndreyCH,
а если так
|
|||
|
||||
gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
AndreyCH, может хэши лучше использовать? (именуемые параметры)
интересно, а как perl на много сложнее чем Java, C++ ? ![]() перебрать:
добавить так:
Это сообщение отредактировал(а) gcc - 20.3.2009, 11:35 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |