Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 10

ООП

29.07.2013, 20:16. Показов 2897. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание на знание ООП.
Дано:
Проект OOPProject состоит из модуля главной формы UformOOP.pas и модуля UOOPBaseClass.pas, содержащего абстрактный класс TAbstractCalculation.
Класс TAbstractCalculation имеет публичную функцию Calculate для проведения вычисления с использованием двух чисел.

Переменные TAbstractCalculation могут храниться в списке. Для добавления используется процедура AddToObjList, для удаления – RemoveFromObjList.
Результаты вычисления по всему списку можно сохранить в объект класса TStrings при помощи процедуры CalcAllObj.
Вы не можете изменять текст модуля UOOPBaseClass.pas.
Вы не можете добавлять модули в UformOOP.pas, кроме стандартных модулей.
Задание:
1. Создать несколько наследников от класса TAbstractCalculation.
Разместить их в новом модуле (или модулях).

2. Добавить необходимые компоненты в модуль UformOOP.pas, для демонстрации работы ваших классов используя CalcAllObj.

Помогите плз!

Добавлено через 3 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{*******************************************************}
{                                                       }
{       OPPProject                                      }
{                                                       }
{       Главная форма приложения                        }
{                                                       }
{       Copyright (C) 2013 Basis                        }
{                                                       }
{*******************************************************}
unit UformOOP;
 
interface
 
uses
  UOOPBaseClass,
 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TformOOP = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  formOOP: TformOOP;
 
implementation
 
{$R *.dfm}
 
procedure TformOOP.FormCreate(Sender: TObject);
var i:Integer;
c:TAbstractCalculation;
s:TStrings;
begin
  c.Calculate(10,20);
  
 // AddToObjList(c);
  //CalcAllObj(1,2,s);
end;
 
end.
Это модуль формы

Добавлено через 1 минуту
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{*******************************************************}
{                                                       }
{       OPPProject                                      }
{                                                       }
{       Модуль базового класса вычисления значения      }
{                                                       }
{       Copyright (C) 2013 Basis                        }
{                                                       }
{*******************************************************}
unit UOOPBaseClass;
 
interface
 
uses
  SysUtils, Classes,Dialogs;
 
type
  // Базовый класс вычисления
  TAbstractCalculation = class(TObject)
  protected
    procedure DoCalculate(const AValue1, AValue2 : integer; out AResult : integer); virtual; abstract;
 
  public
    function Calculate(const AValue1, AValue2 : integer) : integer;
  end;
 
  TClassNas = class(TAbstractCalculation)
    Name: string;
 
    procedure DoCalculate(const AValue1, AValue2: integer; out AResult: integer); override;
  end;
 
 
  procedure CalcAllObj(const AValue1, AValue2: integer; Strings: TStrings);
  procedure AddToObjList(ACalculation : TAbstractCalculation);
  procedure RemoveFromObjList(ACalculation : TAbstractCalculation);
 
implementation
 
var
  ObjList: TList;
 
procedure CalcAllObj(const AValue1, AValue2: integer; Strings: TStrings);
var
  I, Res: Integer;
  Obj : TAbstractCalculation;
begin
  for I := 0 to ObjList.Count - 1 do
    try
      Obj := TAbstractCalculation(ObjList[I]);
      Res := Obj.Calculate(AValue1, AValue2);
      Strings.Add(Obj.ClassName + ': ' + IntToStr(Res));
    except
      on E: Exception do
      Strings.Add(E.Message);
    end;
end;
 
procedure AddToObjList(ACalculation : TAbstractCalculation);
begin
  ObjList.Add(ACalculation);
end;
 
procedure RemoveFromObjList(ACalculation : TAbstractCalculation);
begin
  ObjList.Remove(ACalculation);
end;
 
{ TAbstractCalculation }
function TAbstractCalculation.Calculate(const AValue1,
  AValue2: integer): integer;
begin
  DoCalculate(AValue1, AValue2, Result);
end;
 
 
procedure TClassNas.DoCalculate(const AValue1, AValue2: integer; out AResult:
  integer);
begin
 
  AResult := AValue1 + AValue2;
  ShowMessage('123');
end;
 
 
initialization
  ObjList := TList.Create;
 
finalization
  ObjList.Free;
  ObjList := nil;
 
end.
Это модуль базового класса
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2013, 20:16
Ответы с готовыми решениями:

ООП
Например есть у меня родительский класс ololo =class procedure method1; virtual; end; jaja = class (ololo)

ООП
Я только осваиваю ООП в Делфи, вот столкнулся с одной проблемой и прошу гуру программирования дать совет. Приведу часть кода одного моего...

ооп...
Помогите с программой, с ее реализацией( Заданиее: Описать класс для работы со строкой, позволяющей хранить только двоичное число и...

29
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
30.07.2013, 23:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mss Посмотреть сообщение
Там вообще-то не "подключать" фигурирует, а именно "добавлять"..
Хз что это за "добавлять", но к этой терминологической отсебячине, думаю, можно смело апеллировать, если препод взъерипенится увидев uModule в списках uses юнита UFormOOP)
Вот уж в чем сомневаюсь, так это в возможности выехать на игре слов, а вот попросить у препода разъяснить этот момент — лучший выход.

Цитата Сообщение от mss Посмотреть сообщение
Да и "модуль"="юнит" - тоже сомнительная терминологическая ассоциация
Это не ассоциация, а общепринятый перевод слова unit на русский (как дополнительный пример — «unit testing» –> «модульное тестирование»).
Да и http://wiki.freepascal.org/Unit подтверждает:
A unit is a source code file (or the binary compiled from that file) which was written using the Pascal programming language, and that is designed to be a single module in an application or an object module.
-----------------------------------------
Цитата Сообщение от mss Посмотреть сообщение
Под модулем можно подразумевать и просто шматок кода (содержащего объявление и реализацию класса-наследника), не снабженного обязательными атрибутами, характерными именно для паскаль-юнита. Этот шматок размещается просто в отдельном файле, например, uModule.inc и подключается директивой {$I uModule.inc}
Это же просто текстовая вставка куска кода, а ля Сишный #include и модулем это не является.

Добавлено через 4 минуты
Ну и раз уж мы в Delphi-разделе и говорим о Delphi, то обратимся к первоисточнику:
http://docwiki.embarcadero.com... e_Overview
Program Organization

Delphi programs are usually divided into source-code modules called units.
1
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 00:13
Цитата Сообщение от korvin_ Посмотреть сообщение
попросить у препода разъяснить этот момент — лучший выход
Совершенно верно.
Студень вправе переспросить, а препод обязан разъяснить.

Собственно можно было бы чхать на противоречие между "разместить новый класс в отдельном юните" и "нельзя этот юнит подключать (или добавлять - по барабану) к юниту, в котором будет осуществляться тестирование функциональности нового класса". Средствами RTTI все это решаемо и довольно просто, но препод за это может вытолкать в шею)

Добавлено через 6 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
Это же просто текстовая вставка куска кода
"Вставить"<>"добавить", нихт вар ?)
1
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 10
31.07.2013, 00:14  [ТС]
mms да ты мозг!!!
Цитата Сообщение от mss Посмотреть сообщение
Там вообще-то не "подключать" фигурирует, а именно "добавлять"..
а я блин привязался к этому и всё! Ну теперь то все встало на свои места!
Спасибо тебе большое! И не жалко тебе было убивать на это своё личное время. Mega Respect
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 00:26
Цитата Сообщение от korvin_ Посмотреть сообщение
модулем это не является
Ничего не знаю)
Во фразе "Разместить их в новом модуле (или модулях)" не фигурирует ".. и подключить их к проекту", тем более что и явно сослаться на него (них) как положено в Паскале согласно заданию я не вправе, так что на месте студня я волен трактовать "модуль" как мне угодно, по кр.мере до разъяснений препода)

Добавлено через 2 минуты
Цитата Сообщение от Terabait Посмотреть сообщение
И не жалко тебе было убивать на это своё личное время
На адекватного просителя помощи мне времени никогда не жалко)

Добавлено через 4 минуты
Цитата Сообщение от Terabait Посмотреть сообщение
теперь то все встало на свои места
Ну если ты о том что классы сами должны лезть в компоненты формы, дабы продемонстрировать результаты своей деятельности, то это просто дикость какая-то - негоже преподу учить студней плохому)
1
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 10
31.07.2013, 00:30  [ТС]
korvin_ и mss спасибо вам за содействие, а вы работаете прогами наверное? Всего вам хорошего! Ну я так понимаю на этом все. А и эта тема сама закроется или нет?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 00:42
Terabait,

Я тут репу почесал и понял что имел ввиду препод - нельзя править uses юнита формы, нельзя править юнит с абстрактным классом, но не сказано что нельзя править сам текст проекта, т.е. dpr.
А все что не запрещено, то , как известно, разрешено)
И тогда все встает на свои места - экз-ры классов-наследников создаются прямо в тексте проекта, там же вызывается CalcAllObj(), а стринглист с результатами тестирования классов передается в подправленный для этого конструктор формы (конструктор же формы править не возбраняется и стринглист относится к стандартным - так что все пучком), а форма выводит контент полученного стринглиста куда-то на свои виз.компоненты.
В двух словах, опорные юниты задания и классы в них реализованные по-прежнему друг о друге ничего не знают, что есть кошерно, а диспетчером, рулящим их взаимодействие является сам проект.
1
0 / 0 / 0
Регистрация: 29.07.2013
Сообщений: 10
31.07.2013, 01:10  [ТС]
Да идейка класс! А как в файле dpr править? Я не знаю какой здесь макет. Там щас дела предстоят так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
program OOPProject;
 
uses
  Forms,
  UformOOP in 'UformOOP.pas' {formOOP},
  UOOPBaseClass in 'UOOPBaseClass.pas';
 
{$R *.res}
 
begin
  System.ReportMemoryLeaksOnShutdown := True;
 
  // ***
 
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TformOOP, formOOP);
  Application.Run;
end.
*** Я так понимаю править надо здесь. А хотя куда Var вставить?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 01:31
Delphi
1
2
3
4
5
6
7
8
//<-- здесь место для объявления переменных
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
// <-- здесь можно создавать экземпляры своих классов и стринглиста и делать прочую лабуду с ними согласно задания
Application.CreateForm(TformOOP, formOOP);
formOOP.SetDemoResult(созданный выше стринглист); // вызов метода формы, в котором запомннается переданный объект-стринглист, сам его вывод в виз.контрол следует делать не раньше OnShow
Application.Run;
1
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,616
31.07.2013, 02:16
Цитата Сообщение от mss Посмотреть сообщение
Я тут репу почесал и понял что имел ввиду препод - нельзя править uses юнита формы, нельзя править юнит с абстрактным классом, но не сказано что нельзя править сам текст проекта, т.е. dpr.
Очень сильно сомневаюсь, что вы правильно поняли того препода. И сам преподавал и знакомые с опытом преподавания имеются. И я просто не представляю чем и как можно обкуриться, чтобы предложить писать код в файле проекта! Этот файл (консольные приложения исключаем) вообще-то не предназначен изначально для прямого редактирования. Что в не столь далёком прошлом приводило даже к неработоспособности приложения без явных ошибок в коде.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.07.2013, 09:15
Цитата Сообщение от northener Посмотреть сообщение
сильно сомневаюсь, что вы правильно поняли того препода
Ну я понял как понял)
А а чем и как предпочитаешь укуриваться ты при таких вот исх.данных ? Поделись уж, коль не жадный)..

Добавлено через 5 минут
Цитата Сообщение от northener Посмотреть сообщение
в не столь далёком прошлом приводило даже к неработоспособности приложения без явных ошибок в коде
Оно и сейчас запросто приведет, если не понимать что, как и почему происходит при этом)
Понятно что dpr в vcl gui-проектах нынче не для формошлепов, но может препод и нацеливал именно на смекалку - мол, дотумкаешь - сразу зачет автоматом)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2013, 09:15

ооп в delphi
Мастера и гуру, подскажите, пожалуйста, на уровне идеи, как это сделать оптимальнее. Нужна программка, с формами ввода для трех платежных...

ООП матрицы
Помогите написать программу в ООП: program kursach; uses CRT; const max=10; type matrix = array of real; var a,b,c,at,d:matrix; ...

ООП Дельфи !
Такой вот вопрос: Создал класс унаследованный от (TButton) и теперь надо как-то его вытащить на форму, как ? type TFishka =...

ООП в Delphi
Всем привет! У меня два глупых вопроса: 1)Надеюсь все знают строку var TForm1 = class(TForm) Так вот у меня вопрос, почему такое...

Методы в ООП
Всем привет! У меня есть несколько вопросов касающихся методов, и не только: 1.Метод конструктор. У процедуры конструктора всегда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru