-
> tesseract © (12.05.08 20:26) [14]
Overload - НЕ полиморфизм (а перегрузка). А вот override - это как раз полиморфизм и есть.
-
> налобал даже не проверял
Да уж.. Тело ф-ции CreateHandBook - шедевр, достойный истинного "лобуха")
-
> Юрий Зотов © (12.05.08 20:44) [20]
Не предал значения. Совершенно верно !
-
> Overload - НЕ полиморфизм (а перегрузка).
В общем-то да. overload не перекрывает сам метод. Определение "полиморфизма" само по себе туманновато.
-
> tesseract © (12.05.08 20:53) [23]
Это да. :o) http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8FКратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов».
Полиморфизм — один из трех важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и наследованием).
Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение. Внешне общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (типами аргументов и результатов). Внутренняя общность есть одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций).
-
> tesseract © (12.05.08 20:53) [23]
> Определение "полиморфизма" само по себе туманновато.
По смыслу - разное поведение одного и того же метода в зависимости от класса. По сути - всего лишь косвенная адресация. Ничего туманного.
-
> По смыслу - разное поведение одного и того же метода в зависимости > от класса.
Определение туманно. Как работает, ясно конечно.
-
> tesseract © (12.05.08 21:33) [26]
Ну хватит оправдываться. Все ошибаются. :)
-
> tesseract © (12.05.08 21:33) [26] > > > > По смыслу - разное поведение одного и того же метода в > зависимости > > от класса. > > > Определение туманно. Как работает, ясно конечно.
Очень напомнило "Координаты чудес" Шэкли. :)
-
> Сергей М, (12.05.08 20:45) [21]
Почему ? :o)
-
function CreateHandBook...
begin
if Assigned(fHandBook) then
..
fHandBook.Free ..
try
if not Assigned(fHandBook) then fHandBook := TfHandBook.Create(AOwner, ARec); except
fHandBook.Free; fHandBook := nil; end;
end;
-
> Сергей М. © (13.05.08 08:28) [30]
function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
if Assigned(fHandBook) then
if (fHandBook.FRec.ShowType <> ARec.ShowType) or
(fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
begin
fHandBook.Free;
fHandBook := nil;
end
else
if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
fHandBook.WindowState := wsNormal
else
fHandBook.Show;
Result := True;
try
if not Assigned(fHandBook) then
fHandBook := TfHandBook.Create(AOwner, ARec);
except
Result := False;
end;
end; ?
-
function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
Result := True;
if Assigned(fHandBook) then
if (fHandBook.FRec.ShowType <> ARec.ShowType) or
(fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
FreeAndNil(fHandBook)
else
if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
fHandBook.WindowState := wsNormal
else
fHandBook.Show;
if not Assigned(fHandBook) then
try
fHandBook := TfHandBook.Create(AOwner, ARec);
except
Result := False;
end;
end;
-
Удалено модератором
-
Кто-то писал справочники такого вида, как я пытаюсь написать ? Если да, то кто, что посоветует по этому поводу...
Заранее спасибо !
-
Какого "такого" ?
-
> Сергей М. © (13.05.08 11:00) [35]
unit uHandBook;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
DB, StdCtrls;
type
TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
shbApartment, shbRoom, shbTpRoom);
PHandBook = ^THandBook;
THandBook = packed record
ShowType: TShowHandBook;
case Integer of
0: (
GoToIndex: Integer);
end;
TfHandBook = class(TForm)
pnl: TPanel;
sBtnClose: TSpeedButton;
sBtnPrint: TSpeedButton;
sBtnHelp: TSpeedButton;
tb: TToolBar;
sbInfo: TStatusBar;
sb: TStatusBar;
nv: TDBNavigator;
tSprt1: TToolButton;
tBtnFilter: TToolButton;
grd: TDBGridEh;
ds: TDataSource;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDeactivate(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FRec: THandBook;
public
constructor Create(AOwner: TComponent; ARec: THandBook); overload;
end;
function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
resourcestring
SUnknown = 'Íåèçâåñòíûé ñïðàâî÷íèê';
SRequisite = 'Ñïðàâî÷íèê ðåêâèçèòû ïðåäïðèÿòèÿ';
SEmployee = '';
SJobTitle = '';
SUser = '';
SRole = '';
SLog = '';
SPlace = '';
SPoint = '';
STpPoint = '';
SStreet = '';
STpStreet = '';
SHome = '';
STpHome = '';
SPost = '';
SManagement = '';
SProperty = '';
SOtherRem = '';
SEntrance = '';
SApartment = '';
SRoom = '';
STpRoom = '';
var
fHandBook: TfHandBook;
implementation
uses
uDm, IniFiles, uConstants, uDbs;
function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
begin
if Assigned(fHandBook) then
if (fHandBook.FRec.ShowType <> ARec.ShowType) or
(fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
fHandBook.Free
else
if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
fHandBook.WindowState := wsNormal
else
fHandBook.Show;
Result := True;
try
if not Assigned(fHandBook) then
fHandBook := TfHandBook.Create(AOwner, ARec);
except
Result := False;
fHandBook.Free;
fHandBook := nil;
end;
end;
constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
begin
inherited Create(AOwner);
FRec := ARec;
case FRec.ShowType of
shbUnknown:
begin
Close;
end;
shbRequisite:
begin
Caption := SRequisite;
ds.DataSet := dm.qRequisite;
end;
else
begin
end;
end;
end;
procedure TfHandBook.FormCreate(Sender: TObject);
begin
if OpenDataSet(ds.DataSet) then
begin
end
else
begin
end;
end;
procedure TfHandBook.FormShow(Sender: TObject);
begin
end;
procedure TfHandBook.FormPaint(Sender: TObject);
begin
end;
procedure TfHandBook.FormActivate(Sender: TObject);
begin
end;
procedure TfHandBook.FormResize(Sender: TObject);
begin
end;
procedure TfHandBook.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
end;
procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
begin
end;
procedure TfHandBook.FormDeactivate(Sender: TObject);
begin
end;
procedure TfHandBook.FormHide(Sender: TObject);
begin
end;
procedure TfHandBook.FormDestroy(Sender: TObject);
begin
end;
end.
-
Все выбросить на помойку клавишей Shift+Delete
Читать Тейксейру с Пачеко
-
> User1 (13.05.08 11:06) [36]
Это не справочник, это просто лобуховая декларация и реализация некоего класса формы)
-
> Сергей М. © (13.05.08 11:20) [38]
А что же догда понимать под справочником программы ?
Тогда объясните как реализовать "гибкий справочник" для работы с некоторыми таблицами в БД ?...
|