IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Объекты... Объекты? Объекты !, (для начинающих)
volvo
сообщение 10.06.2009 10:16
Сообщение #1


Гость






Итак, в этой теме я бы хотел поговорить об объектах, то есть об ООП (Объектно-Ориентированном Программировании). Я не буду опять описывать всю теорию, называть 3 основных принципа ООП, и т.д., это все можно прочитать вот тут: ООП. Объектно-ориентированное программирование , да и в любой книжке по языку программирования. Любому языку программирования.

Здесь я бы хотел поговорить о другом. О решении конкретной задачи с использованием объектов. Причем хотелось бы, чтобы это был не монолог, а диалог. Если вам (а я обращаюсь не только к тем, кто начинает программировать вообще, как выяснилось, даже люди, программирующие достаточно давно, не считают ООП "своей стезёй", эта тема и для них тоже) интересно - я буду продолжать. Если неинтересно - скажите, я продолжать не буду. Я уже когда-то начинал подобную тему, но особого отклика это не получило. Задавайте вопросы, не бойтесь, что они покажутся странными, простыми и т.д. Здесь важно разобраться во всех мелочах.

Для начала я бы хотел взять вот такую задачу (это - реальное условие, в которое я внес небольшие изменения): "Написать программу (работающую в диалоговом режиме), которая осуществляет взаимодействие пользователя с одной из трех ДСД - динамических структур данных - Список, Стек, Бинарное дерево, и позволяет:
1) добавлять элементы в структуру
2) удалять элементы из структуры
3) отображать текущее содержимое выбранной структуры данных на экране".

Ну, для начала, "а почему именно ООП?" спросите вы. И отчасти будете правы, поскольку эту программу (как и все остальные, впрочем) можно написать, используя процедурное программирование. Отвечаю smile.gif :
1) Если б я хотел, чтоб это было написано без ООП, я бы не начинал эту тему (или не включил бы сюда эту задачу), в оригинальном задании так и было сказано: "... объектно-ориентированную программу..."
2) решить задачу с использованием только процедур/функций, конечно, можно, но такое решение будет а) более объемным, чем с использованием объектов; б) менее расширяемым

Есть еще третья причина по которой я бы советовал сделать "это" с использованием объектов: в результате вы получите типы "Стек", "Список", "Дерево", которые будут максимально независимы от окружения, от остальной части программы, и их можно будет с успехом применять в других проектах.

Итак, задача поставлена, можно начинать. Для начала - о главном, о том, с чего начинается проектирование программы: о ее структуре, о том, какие объектные типы (и как именно) будут описаны в программе. Так называемые "заглушки", дающие представление об общей структуре, но пока не касающиеся реализации... Многие из начинающих быстро сделают так:
type
TList = object
{ тут реализация списка }
end;
TStack = object
{ тут реализация стека }
end;
TTree = object
{ тут реализация дерева }
end;

Var
myList: TList;
myStack: TStack;
myTree: TTree;

{ ... }
WriteLn('С какой структурой будете работать? 1) List 2) Stack 3) Tree');
ReadLn(ch);
Case ch of
'1':
begin
{ работа со списком через myList }
end;

'2':
begin
{ работа со стеком через myStack }
end;

'3':
begin
{ работа с деревом через myTree }
end;
end;
Откуда, собственно, первый вопрос: А хорошо ли делать так, как я показал выше? Какие у этого способа вы видите недостатки, какие преимущества? Как бы вы посоветовали мне сделать это по-другому? (Учтите, написание хорошей программы - это сложный процесс, иногда приходится переписывать все почти с нуля, если сразу ошибся при проектировании, поэтому важно с самого начала спроектировать правильно, и только потом приступать к реализации, а не так, как делают очень многие - сначала нарисуют окошечки-рюшечки, а потом туда пытаются втиснуть, собственно, основную часть задания...)

P.S. Если это задание вам кажется неподходящим, предлагайте свои варианты, можете взять любое реальное задание с форума со ссылкой на него (только не надо давать здесь свое задание, в надежде, что вам тут его решат полностью. Может, и решат, но времени это займет достаточно много smile.gif )

P.P.S. Свои ответы скрывайте тегами [SPОILER][/SPОILER] (все буквы в названии тегов должны быть латинские), чтоб другие тоже могли подумать самостоятельно, не видя вашего ответа...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 10.06.2009 12:53
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


О, хорошая тема. Советы от гуру =)
Спойлер (Показать/Скрыть)


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
volvo   Объекты... Объекты? Объекты !   10.06.2009 10:16
Archon   О, хорошая тема. Советы от гуру =) Возможно, имеет...   10.06.2009 12:53
volvo   Archon, можешь показать (псевдо)кодом первый и вто...   10.06.2009 13:20
Archon   Вот что я имел ввиду: В первом случае непонятно, ...   11.06.2009 10:46
volvo   Естественно, если ты хочешь написать ее отдельно (...   11.06.2009 11:18
Archon   Ага, я что-то такое себе представлял :) А если до...   11.06.2009 11:27
volvo   Это не даст никакого выигрыша, вот множественное н...   11.06.2009 12:17
Client   type tbase = object end; dds_first = object...   12.06.2009 17:46
volvo   Это не полное описание объектов... Только иерархия...   12.06.2009 18:31
Archon   Это потому что полиморфизм через интерфейсы в делф...   12.06.2009 19:45
volvo   Это потому, что работа с Interface-ами ЗАМЕНЯЕТ, а...   12.06.2009 20:15
Archon   Не зачем наследовать функциональность от всех пред...   12.06.2009 20:58
volvo   Бла-бла-бла... На уровне схемы все выглядит прекра...   12.06.2009 21:04
Client   Только не закрывайте тему ПЛИИИИЗ щас время малова...   12.06.2009 21:40
Archon   {$mode objfpc} type IStack = interface pr...   12.06.2009 21:54
volvo   Я б так делать не стал, это все, что я могу тебе с...   15.06.2009 18:04
Archon   Однако внутри экземпляра происходит тоже самое - у...   15.06.2009 19:30
volvo   Если ты внимательно читал мои ответы в теме про Do...   15.06.2009 20:52
Archon   Да, без тебя заглох =). Я было пытался продолжать ...   15.06.2009 21:16
Client   Тему несколько раз читал, но не очень понял, поэто...   16.06.2009 15:32
volvo   unit unit_a; interface type ta = object priv...   16.06.2009 16:54
Archon   Давай представим, что это возможно:type TA = obje...   16.06.2009 20:27
volvo   По этой же причине нельзя использовать перегрузку ...   16.06.2009 21:24
Client   А что это такое? Добавлено через 3 мин. А в одн...   16.06.2009 21:26
volvo   В одном модуле директивы private/protected не рабо...   16.06.2009 22:32
Archon   А если метод без параметров? Тогда надо уже не доб...   16.06.2009 22:58
Client   Добавим новый метод, назовем по другому и все? Или...   18.06.2009 22:45


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 11:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"