Question

In the snippet below I have two classes that have the exact same procedure names. The code within these procedures is substantially different. Is it possible to consolidate these classes down to allow for easier maintenance and future enhancements or am I going about this in an acceptable manner?

type
  TMFRCore = class
    private
      FGridMain: TNextGrid;
      FGridSummary: TNextGrid;
    public
      constructor Create(Grid: TNextGrid; SummaryGrid: TNextGrid);
      destructor Destroy; override;
      procedure SetRowColour(Grid: TNextGrid; Row: Integer; Color: TColor; Start: Integer = 0);
      procedure OnSummaryDblClick(Sender: TObject);
      function GetSectionId(Section: String): Integer;

      property GridMain: TNextGrid read FGridMain write FGridMain;
      property GridSummary: TNextGrid read FGridSummary write FGridSummary;
  end;

type
  TMFRDates = class(TMFRCore)
    public
      procedure UpdateSummary;
      procedure UpdateMain(const sAircraft: string);
  end;

type
  TMFRHours = class(TMFRCore)
    public
      procedure UpdateSummary;
      procedure UpdateMain(const sAircraft: string);
  end;

I initialise these classes as follows;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  MFRHours := TMFRHours.Create(gridHours, gridHoursSummary);
  MFRDates := TMFRDates.Create(gridDates, gridDatesSummary);
end;
Was it helpful?

Solution

You can declare the methods as virtual (and probably abstract) in the base class so you can take advantage of dynamic dispatch and polymorphism, but otherwise, there isn't really anything else to consolidate. Everything common to those classes is already in the one base class. Adding those declarations will actually mean you have more code because you'd still need to keep the existing method declarations and implementations.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top