Конференция "Прочее" » override or overload ?
 
  • Юрий Зотов © (12.05.08 20:44) [20]
    > tesseract ©   (12.05.08 20:26) [14]

    Overload - НЕ полиморфизм (а перегрузка). А вот override - это как раз полиморфизм и есть.
  • Сергей М, (12.05.08 20:45) [21]

    > налобал даже не проверял


    Да уж..
    Тело ф-ции CreateHandBook - шедевр, достойный истинного "лобуха")
  • User1 (12.05.08 20:46) [22]

    > Юрий Зотов ©   (12.05.08 20:44) [20]

    Не предал значения. Совершенно верно !
  • tesseract © (12.05.08 20:53) [23]

    > Overload - НЕ полиморфизм (а перегрузка).


    В общем-то да. overload не перекрывает сам метод. Определение "полиморфизма" само по себе туманновато.
  • User1 (12.05.08 21:00) [24]

    > 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

    Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов».

    Полиморфизм — один из трех важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и наследованием).

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

  • Юрий Зотов © (12.05.08 21:24) [25]
    > tesseract ©   (12.05.08 20:53) [23]

    > Определение "полиморфизма" само по себе туманновато.

    По смыслу - разное поведение одного и того же метода в зависимости от класса. По сути - всего лишь косвенная адресация. Ничего туманного.
  • tesseract © (12.05.08 21:33) [26]

    > По смыслу - разное поведение одного и того же метода в зависимости
    > от класса.


    Определение туманно. Как работает, ясно конечно.
  • main © (13.05.08 02:06) [27]

    > tesseract ©   (12.05.08 21:33) [26]


    Ну хватит оправдываться. Все ошибаются.
    :)
  • Германн © (13.05.08 04:16) [28]

    > tesseract ©   (12.05.08 21:33) [26]
    >
    >
    > > По смыслу - разное поведение одного и того же метода в
    > зависимости
    > > от класса.
    >
    >
    > Определение туманно. Как работает, ясно конечно.

    Очень напомнило "Координаты чудес" Шэкли. :)
  • User1 (13.05.08 06:56) [29]

    > Сергей М,   (12.05.08 20:45) [21]

    Почему ? :o)
  • Сергей М. © (13.05.08 08:28) [30]
    function CreateHandBook...
    begin
    if Assigned(fHandBook) then
    ..
        fHandBook.Free //разрушение объекта, в fHandBook остается мусор (1)
    ..
    try
      if not Assigned(fHandBook) then // в случае (1) уловие будет ложным
        fHandBook := TfHandBook.Create(AOwner, ARec); //и эта строчка никогда не будет выполнена (2)
    except
      fHandBook.Free; // в случае исключения при выполнении (2) разрушение заведомо несозданного объекта лишено всякого смысла
      fHandBook := nil; // равно как лишена смысла и эта строчка
    end;
    end;

  • User1 (13.05.08 08:35) [31]

    > Сергей М. ©   (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;



    ?
  • Сергей М. © (13.05.08 08:59) [32]
    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;

  • XentaAbsenta © (13.05.08 09:42) [33]
    Удалено модератором
  • User1 (13.05.08 10:57) [34]
    Кто-то писал справочники такого вида, как я пытаюсь написать ?
    Если да, то кто, что посоветует по этому поводу...

    Заранее спасибо !
  • Сергей М. © (13.05.08 11:00) [35]
    Какого "такого" ?
  • User1 (13.05.08 11:06) [36]

    > Сергей М. ©   (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

    { TfHandBook }

    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
      { Private declarations }
      FRec: THandBook;
    public
      { Public declarations }
      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
    { &#207;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#  245; &#236;&#238;&#228;&#243;&#235;&#229;&#233;. }
    uDm, IniFiles, uConstants, uDbs;

    {$R *.dfm}

    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
        //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
      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.

  • Игорь Шевченко © (13.05.08 11:15) [37]
    Все выбросить на помойку клавишей Shift+Delete

    Читать Тейксейру с Пачеко
  • Сергей М. © (13.05.08 11:20) [38]

    > User1   (13.05.08 11:06) [36]


    Это не справочник, это просто лобуховая декларация и реализация некоего класса формы)
  • User1 (13.05.08 12:30) [39]

    > Сергей М. ©   (13.05.08 11:20) [38]

    А что же догда понимать под справочником программы ?

    Тогда объясните как реализовать "гибкий справочник" для работы с некоторыми таблицами в БД ?...
 
Конференция "Прочее" » override or overload ?
Есть новые Нет новых   [134435   +13][b:0.001][p:0.006]