![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.04.2011
Сообщений: 16
|
![]()
Всем привет!
Осваиваю ООП. У меня совсем нет опыта работы с интерфейсами в Delphi, но очень хочется сделать правильно и объектно-ориентированно. Прошу помощи. Нужно прочитать данные о цепочке отрезков из XML-файла. Пример файла: Код:
Я делаю так: Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 | |
Пользователь
Регистрация: 28.04.2011
Сообщений: 16
|
![]()
Вот чем все закончилось.
Я изначально была неправа, когда писала TXMLLineNode = class(IXMLLineNode). При такой записи мне пришлось бы самостоятельно с нуля расписывать реализацию всех функций интерфейса IXMLNode - интерфейс сообщает только о заголовках функций и процедур, которые должен содержать класс, на то он и интерфейс. Переломной в ходе ликбеза для меня стала вот эта статья - коротко, по теме и с примерами. Это означает, что если и наследовать, то не от интерфейса IXMLNode, а от класса, который реализует этот интерфейс и который в Delphi применяется при обработке узлов XML. Это класс TXMLNode модуля XMLDoc, и теперь все становится просто: создавать наследник TXMLLineNode = class(TXMLNode). Но: в справке по RAD Studio говорится: Цитата:
Поэтому от функции GetNextNode я отказалась вообще и просто добавила этот код в свою процедуру LoadFromXML - не так уж и много в ней было строк. Куда еще можно было перенести мою функцию из TForm1 - другой вопрос. Но эта тема вроде бы закрыта. Спасибо, кто читал. |
|
![]() |
![]() |
![]() |
#3 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Хм, не видел этой темы тут.
А что мешало использовать ChildNodes ? Я бы читал каждый чейн и передавал в загрузчик, а загрузчик по порядку грузил бы каждую точку связывая как ему надо (я так понимаю, примерно так и сделали, возможно даже используя чайлдов) А вынести функцию в любое место, но имхо рационально сделать некий загрузчик и у него будет список вершин (или список чейнов со списками вершин) к коим он будет давать доступ извне (из формы или точнее из вьюхи, см. MVC ), и его вьюха будет просить загрузить нужный файл, и он его почейново грузит. Вообще , как я понимаю, некоторая проблема стоит в проектировании, ведь одна нода на уровне не должна ничего знать о других нодах, ибо они лишь элементы во владельце-контейнере и он заправляет возможности обращения к поднодам. Поэтому лучше было бы иметь ноды с 4 координатами (пусть и с избыточной инфой). А если надо с двумя, попарно объединяя ноды и подразумевая , что они именно подряд (хотя емнип, это не гарантировано в хмл) то тут надо и бизнес-логику иметь соответствующую. Ведь сами подумайте, если неделимая сущность в вашей системе это линия (Вы же создали класс ТЛайн) и Вы ею заправляете , то зачем искусственно её делить ? Программируйте на языке предметной области. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 28.04.2011
Сообщений: 16
|
![]()
phomm, большое спасибо за ссылку на MVC! Это как раз то, на чем у меня пока пробел. Буду читать.
Проблема со структурой файла есть, но я получаю его уже в готовом виде из другой программы. Хотя да, есть обратная связь с разработчиком и возможность изменить формат. Мое решение представлять данные по линиям обосновано и алгоритмом, и форматами файлов, и связкой с другой системой. Да, так и делаю. Напрямую к ChildNodes[i] и [i+1] не обращаюсь, потому что структура может быть сложнее, и кроме <Node/> могут попадаться потомки другого типа (а именно вложенные цепочки <Chain></Chain> - внутренние границы для областей с отверстиями). А могут и не попадаться. Поэтому там именно функция поиска следующего элемента типа Node. |
![]() |
![]() |
![]() |
#5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Один из самых мною уважаемых мануалов по дельфи, раздел про интерфейсы: http://delphikingdom.ru/asp/viewitem.asp?catalogid=1202
это для ликбеза по интерфейсам |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SSE инструкции + ликбез | Kukurudza | Общие вопросы C/C++ | 4 | 10.04.2012 19:26 |
Ошибка в примере K&R | 8Observer8 | Общие вопросы C/C++ | 20 | 22.12.2011 12:33 |
Ubuntu Linux: настроил Ин-т(PPPoE). Нужен краткий ликбез опытного линуксоида по поводу безопасности | Alexei91 | Безопасность, Шифрование | 7 | 24.06.2011 06:32 |
cisco packet tracer ликбез | the_deer_one | Свободное общение | 0 | 14.06.2011 13:04 |