Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2007, 13:21   #1
f3nix
 
Регистрация: 16.10.2007
Сообщений: 7
По умолчанию Программа, хранящяя класс

Здравствуйте, уважаемые программисты! Я пока только учусь на прогр.
И мне нужна ваша помощь.
Препод дал такое вот задание:
сделать любую прогу, но чтоб там был создан свой собственный класс...
и чтоб туда входило - наследование, инкапсуляция и полиморфизм.
Если вам не трудно, помогите пожалуйста.

С Уважением, Роман!
f3nix вне форума Ответить с цитированием
Старый 17.10.2007, 17:29   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

на каком языке?
Hollander вне форума Ответить с цитированием
Старый 17.10.2007, 17:36   #3
kommunist
C# developer
Форумчанин
 
Аватар для kommunist
 
Регистрация: 03.10.2007
Сообщений: 393
По умолчанию

хотя бы знать что она должна делать
а то напиши, а что незнаю


хотелось бы поконкретней
I like WPF
kommunist вне форума Ответить с цитированием
Старый 18.10.2007, 05:05   #4
f3nix
 
Регистрация: 16.10.2007
Сообщений: 7
По умолчанию

Пишем на Delphi. Программа может быть любая. Ну, допустим хотя бы про "Монитор каталогов".
Он должен делать:
1. Проверять каталог на предмет добавления, удаления, переименования и изменения файлов в каталоге, используя для этого отдельный поток.
2. Уведомлять основной поток(главную форму) об изменениях.
3. Вести простейший протокол своей работы.
4. Определять имя изменившегося файла.
5. Сворачиваться в виде иконки в SysTray.
f3nix вне форума Ответить с цитированием
Старый 19.10.2007, 05:19   #5
f3nix
 
Регистрация: 16.10.2007
Сообщений: 7
По умолчанию

Цитата:
Сообщение от kommunist Посмотреть сообщение
хотя бы знать что она должна делать
а то напиши, а что незнаю


хотелось бы поконкретней
Пишем на Delphi. Программа может быть любая. Ну, допустим хотя бы про "Монитор каталогов".
f3nix вне форума Ответить с цитированием
Старый 19.10.2007, 12:41   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,087
По умолчанию

фига се хотя бы
pu4koff вне форума Ответить с цитированием
Старый 19.10.2007, 13:35   #7
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Цитата:
Он должен делать:
1. Проверять каталог на предмет добавления, удаления, переименования и изменения файлов в каталоге, используя для этого отдельный поток.
2. Уведомлять основной поток(главную форму) об изменениях.
3. Вести простейший протокол своей работы.
4. Определять имя изменившегося файла.
5. Сворачиваться в виде иконки в SysTray.
Эм..... а сколько семестров ты пропустил?
Почему, собственно спрашиваю:
Цитата:
1. Проверять каталог на предмет добавления, удаления, переименования и изменения файлов в каталоге, используя для этого отдельный поток.
Какой поток? Thread, я надеюсь?
И КАК проверять? " добавления, удаления," - это-то просто - сохранить список файлов папки в TStringList и сравнивать. "изменения" - Тут решения могут колебаться от "сохранить копию файла и потом сравнивать" до "написание собственного драйвера файловой системы". А вот "переименования" тут только ставить хук на системные функции, если нужно именно "переименование". Не верится, что это задание для человека "только начавшего изучать программирование".


А классы в Delphi - ща будут...

Последний раз редактировалось Maslan; 19.10.2007 в 13:43.
Maslan вне форума Ответить с цитированием
Старый 19.10.2007, 14:29   #8
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Полный код модуля:
(на форме только одна кнопка и всё)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure PolymorphDemo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 TAncestor = class
 private
 protected
 public
   {Виртуальная процедура.}
   procedure VirtualProcedure; virtual;
   procedure StaticProcedure;
 end;
 TDescendant = class(TAncestor)
 private
 protected
 public
    {Перекрытие виртуальной процедуры.}
   procedure VirtualProcedure; override;
   procedure StaticProcedure;
 end;
 TInheritedLabel= class(TLabel)
   public
    constructor Create(Aowner:TComponent);
    destructor Destroy;
 end;

 var
  Form1: TForm1;
  Lab:TInheritedLabel;
implementation

{$R *.dfm}
  { TAncestor }
   
 procedure TAncestor.StaticProcedure;
 begin
   ShowMessage('Ancestor static procedure.');
 end;
   
 procedure TAncestor.VirtualProcedure;
 begin
   ShowMessage('Ancestor virtual procedure.');
 end;

  procedure TDescendant.StaticProcedure;
 begin
   ShowMessage('Descendant static procedure.');
 end;
   
 procedure TDescendant.VirtualProcedure;
 begin
   ShowMessage('Descendant override procedure.');
 end;

procedure TForm1.Button1Click(Sender: TObject);

begin
  PolymorphDemo;
  Lab:=TInheritedLabel.Create(Form1); //Создаём новый объект-- наследник TLabel
                                      //но у него цвет текста по умоланию зелёный
   Lab.Caption:='Проверка наследования';//И посмотрим, появился ли у нас на форме Label
                                     //Если появился, значит наследование работает.

     { Lab.FLayout:=tlTop; }
 // эта строчка ^^^^^^^^ если раскомментировать вызовет ошибку, т.к. свойство
// FLayout объявлено как private в
//   TGraphicControl(потомком которого является
//    TCustomLabel(потомком которого является
//      TLabel(потомком которого является наш TInheritedLabel)))
//  и недоступно вне класса.



//процедура procedure SetAutoSize(Value: Boolean); override;
// объявлена как protected и будет доступна потомкам класса
      Lab.SetAutoSize(True);


//Свойство     property Caption;   объявлено "public" - и будет доступно всем.
      Lab.Caption:='Инкапсуляция работает';

end;

procedure TForm1.PolymorphDemo;
var
   MyObject1: TAncestor;
   MyObject2: TAncestor;
 begin
   MyObject1 := TAncestor.Create;
   MyObject2 := TDescendant.Create;
   try
     MyObject1.StaticProcedure;  //Тут сработает static-процедура предка
     MyObject1.VirtualProcedure; // тут - виртуальная
     MyObject2.StaticProcedure;  // Тут опять-таки static ПРЕДКА, т.к. мы её не переопределяли
     MyObject2.VirtualProcedure; // А тут виртуальная потомка (мы её
                                 //переопределили с помощью override
   finally
     MyObject1.Free;
     MyObject2.Free;
   end;

end;

{ TInheritedLabel }

constructor TInheritedLabel.Create(Aowner: TComponent);
begin
 inherited Create(Form1);
 Self.Name:='Inherited_Lablel';
 Self.Font.Color:=clGreen;
 Self.Font.Size:=40;
 Self.Left:=20;
 Self.Top:=50;
 Self.Parent:=Form1;
end;

destructor TInheritedLabel.Destroy;
begin
 inherited Destroy;
end;

end.
Демонстрирует и инкапсуляцию и наследование и полиморфизм.

А с "хотя бы монитор" - это ты погорячился явно....
Maslan вне форума Ответить с цитированием
Старый 19.10.2007, 18:00   #9
f3nix
 
Регистрация: 16.10.2007
Сообщений: 7
По умолчанию

MAslan, большое спасибо хотя бы за это. В твоем коде я разобрался лучше чем у преподов.
f3nix вне форума Ответить с цитированием
Старый 19.10.2007, 18:07   #10
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Да не за что. Если что-то непонятно, то спрашивай - не стесняйся =)
"инкапсуляцию и наследование и полиморфизм" - что слова значат знаешь?
Maslan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс Юлёк Фриланс 6 15.06.2008 15:00
Класс и конструктор Andr Общие вопросы C/C++ 2 10.05.2008 18:21
Мой класс SunKnight Общие вопросы Delphi 2 02.05.2008 14:02
Класс TStringList Pblog Обсуждение статей 0 27.05.2007 02:13