![]() |
Модераторы: 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 |
||||||
|
|||||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
AndreyCH, "бросилось в глаза", не значит, что "все плохо"
![]()
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
gcc, сначала о предложенном коде... Я правда не очень понял зачем делать именно так... Хэш я не использую потому что на одном "уровне" может присутствовать n одинаковых тэгов.
Отвечу про С++ и Java. Они ни сложнее ни проще. Они другие. ![]() ![]() ginnie, да я в общем-то так и понял. ![]() Напишу до конца что хотел сдалать и выложу сюда на критику. Может еще что подправить нужно? |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Совершенно бессмысленный вопрос. Не вижу смысла продолжать в данном топике. -------------------- Died at Life.pl line 21 |
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Народ, с вашего позволения задам еще пару вопросов!
Так вот тут мы видим пару классов (объектов). Как мне последовательно перебирая массив понимать объект какого типа сейчас в этой ячейке? Хотелось бы услышать Ваши варианты решения (свое решение не привожу, дабы не подталкивать...) ![]() Это сообщение отредактировал(а) AndreyCH - 3.4.2009, 15:39 |
|||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
http://search.cpan.org/~gbarr/Scalar-List-.../Scalar/Util.pm reftype EXPR Добавлено через 2 минуты и 32 секунды
|
||||
|
|||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Не по теме, но все же) Должно быть (), иначе у вас получается массив из одного элемента - ссылки на другой анонимный массив. Вы хотите узнать именно структуру какого типа передавали в bless? Или все-таки просто имя класса объекта? Если первое, то gcc ответил уже, а если второе (что, имхо, более вероятно), то perldoc -f ref -------------------- Died at Life.pl line 21 |
|||
|
||||
AndreyCH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.9.2007 Репутация: нет Всего: нет |
Спасибо за ответы! Все сделал как Вы написали, и все получилось!
![]() Ну а для эксперимента у базового класса сделал метод getClassName() где и получаю имя класса. Двигаюсь дальше. ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |