Deklaracja i implementacja Interfejsu

0

Czytałem artykuły na stronie ale wciąż nie mogę pojąć, być może ktoś na moim przykładzie, niczym młotem wtłucze mi to do głowy.
Mój interface zaprojektowany zgodnie z przykładem na stronie:

unit i_kstext;

interface

uses Classes;

type T2DArray = array of array of string;

type
  IKStext = Interface

  function getHeaderColumnNames():TStringList;
  function getSingleHeaderColumnName(lp: integer):String;

  End;

implementation

end.

Oraz moja klasa implementująca owy interface (bez zaimplementowanych funkcji):

unit main;

interface

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

type
  Tf_main = class(TForm, IKStext)
    b_chose_file: TButton; 
    procedure b_chose_fileClick(Sender: TObject);    

  private
    { Private declarations }
  public

  end;

  function getFilePath():string;

var
  f_main: Tf_main;

implementation


{$R *.dfm}

  function getFilePath():string;
  var TF: TextFile;

  begin
    if f_main.odChoseFile.Execute then
      begin
        Result := f_main.odChoseFile.FileName;
      end;
  end;
end.

I oto kod moich funkcji:

function getHeaderColumnNames():TStringList;
begin
(bla bla, nieistotny ciag znakow)
end;

function getSingleHeaderColumnName():TStringList;
begin
(bla bla, nieistotny ciag znakow)
end;

Mógłbym prosić o zabawienie się w puzzle i wstawienie właściwych fragmentów na swoje miejsca oraz ewentualne poprawienie składni?

2

I znowu Ty?

Posłuchaj mnie uważnie: Wczoraj bodajże pytałeś się czemu nie możesz przypisać jednej tablicy drugiej, a dzisiaj ZNOWU pytasz? No chyba coś jest nie tak. Nie żebym mówił że coś złego jest w pytaniu, ale zanim zapytasz:
1.EKSPERYMENTUJ
2.EKSPERYMENTUJ
3.SZUKAJ NA GOOGLE
4.EKSPERYMENTUJ
5.GOTO 1

poza tym, wydaje mi się, że interfejsy to nie Twój poziom.

Ale Ty oczywiście sądzisz że my tutaj będziemy uczyć. Nie. My tutaj rozwiązujemy problemy, od nauki masz artykuły i google generalnie.

A skoro nie podajesz żadnych kodów błędów dawanych przez kompilator znaczy że nawet nie eksperymentowałeś.

Nie żebym się na siłę czepiał, ale według mnie po prostu traktujesz nas jakbyśmy nie mieli własnego czasu, albo żadnych problemów własnych, albo jakbyś nam płacił za pomoc. Tak nie jest. Więc poświęć własny czas aby rozwiązać problemy zanim poprosisz nas o pomoc.

0

I teraz wracając do tematu bo o ile opanowałem podstawy interfejsów i klas w javie to w delphi przychodzi mi to z trudem. Podejrzewam że kod zamieszczony wyżej to kompletna sieczka.

Próbowałem podążać za kodem zaprezentowanym w tym artykule: http://www.prestwood.com/ASPSuite/KB/Document_View.asp?QID=101439 ale wyrzuca mi 'unsatisfied forward or external declaration' na deklaracjach funkcji w części public klasy implementującej interfejs. Nawiasem to ten artykuł, mam wrażenie, nieco inaczej przedstawia tworzenie interfejsów niż rodzimy Interfejsy

W javie interface jest w osobnym pliku, a tutaj mam w jednym unicie interfejs i klase. No i jedna funkcje deklaruje sie najpierw w interfejsie, potem w klasie a na koniec implementuje w tymże samym unicie? O_o

0

W javie interface jest w osobnym pliku, a tutaj mam w jednym unicie interfejs i klase. No i jedna funkcje deklaruje sie najpierw w interfejsie, potem w klasie a na koniec implementuje w tymże samym unicie? O_o

Że co?
Podstawowe pytanie: Po co Ci interfejsy?

0

Ktoś wymaga bym umiał je stosować i próbuje je zastosować na siłę. Chodzi mi o zbiór funkcji których będzie mogła używać dowolna klasa. Sądziłem, że do tego służą interfejsy

1

Hm, może troche odbiegnę od tematu ale: Rozumiem, że żeby jedna klasa dziedziczyła po drugiej, najlepiej żeby obie były w tym samym unicie? (ma problem z zastosowaniem dziedziczenia, krzyczy mi o brak deklaracji w uses, potem znowu krzyczy że stosuje uses obustronnie)

Nie muszą być, właściwie to kompilatorowi to lotto:

unit A;
[...]
type
  Tklasabazowa=class();


unit B;
uses A;
[...]
type
 Tpochodna=class(Tklasabazowa);

Ale nie można

unit A;
uses B;

unit B;
uses A;
0

A może jeszcze jedno. Jeśli zadeklaruje w uses użycie danego unitu to automatycznie dostaje dostęp do wszystkich zawartych w nim metod. Jaki jest zatem wtedy praktyczny sens dziedziczenia? (tak, wiem że prawdopodobnie popełniłem gafę :P )

1

Jeśli zadeklaruje w uses użycie danego unitu to automatycznie dostaje dostęp do wszystkich zawartych w nim metod.

  1. W module nie ma metod tylko są procedury i funkcje.
  2. Nie do wszystkich, tylko tych wspomnianych w sekcji interface.

A moduły nie dziedziczą...

Jak masz więcej yhm, oczywistych pytań, to pytaj albo w newbie albo na IRC (którego nie ma niestety).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.