Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> про маленькие классы, code reusing и интерфейсы 
:(
    Опции темы
manu
Дата 4.12.2004, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 14.10.2004

Репутация: 2
Всего: 3



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

Приведу пример. Недавно мне нужна была библиотека для работы с подмножеством xml. Поиск в сети дал мне несколько результатов, однако ни одно меня не устроило либо из-за слишком большого и непонятного интерфейса либо из-за кривизны написания. Поэтому я решил написать эту библиотеку сам. Вот какие классы у меня получились:
xml::format -- здесь хранятся константы и некоторые функции, класс чем-то похож на char_traits;
xml::element -- этот класс содержит всего три поля: название элемента, его атрибуты и дочерние элементы, также есть несколько вспомогательных функций, напр., есть функция, которая находит по названию элемента, имени атрибута и его значению элемент. Т.е. xml::element занимается только хранением данных.
xml::parser -- этот класс читает xml::element из потока. Коротко говоря, ему скармливаешь std::istream и xml::element, а он читает из потока текст и на его основе строит элемент.
xml::renderer -- это класс наоборот, пишет в ostream содержимое xml::element.
xml::document -- этот класс наследуется от xml::element. Ему в конструкторе передается имя файла и он считывает его при конструировании и записывает в него при удалении данные из xml::element.

Что мы видим? Очень простая структура. Легко понимается, улучшается, изменяется. Общий размер кода -- всего 10 килобайт.

Итак, я прихожу к выводу о важности правильного проектирования. Важности четких и неизменяемых интерфейсов.
Жду от уважаемых мастеров комментариев.
PM   Вверх
sergejzr
Дата 4.12.2004, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Вообще лучше всего используются функции. Если они независимые.

Мне кажется, что проблема с библиотеками в том, что там всё друг за другом тянется.
Надо две строчки кода, а приходится устанавливать по 10МБ классов smile

Конечно понятно, что элегантней считается использовать Date из библиотеки XY, чем написать его самому, но это отражается на повторении эксперимента. Т.е если кто нибудь решит использовать мою библиотеку, он должен будет скачать себе полинтернета smile

Рано или поздно все библиотеки разрастаются в таких монстров.
Помоему только у борланда более-менее хорошее решение проблемы. Это компоненты.
Их действительно можно реюзать.

Это проблема не только Си++, но и практически всех оо-языков.
Например вчера мне понадобился класс конвертирующий pdf в txt на java.
Как вы думаете, сколько библиотек мне пришлось перекачать, чтобы запустить есго в первый раз?
Всего 20 МБ в zip'е 60 МБ распаковано. (!!!!!!!!!!!!!!!!!!!!!)
Что самое неприятное: 4 архива с разных мест интернета.
Если бы сидел на модеме, не видать мне конвертора как своих ушей smile

После чего я обнаружил, что надо впихать туда несколько дней работы, чтобы эта история заработала с моим классиком на три строчки, который собственно передаёт название pdf и txt smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.