ich habe mir gerade das Wiki zum Thema Units angeschaut und habe da ein Ich-kapiers-einfach-nicht-Erlebnis.
Im Wiki steht:
Das Grundgerüst einer Unit:
// Name der Unit
unit uTest;
//ggf. diverse Compileranweisungen (Compilerdirektiven)
{$mode objfpc}{$H+}
// Der Interfaceteil:
// Dieser Abschnitt wird mit dem Schlüsselwort interface eingeleitet.
// Alles was in diesem Abschnitt steht, ist öffentlich und kann sobald die Unit in andere Units eingebunden ist,
// von diesen Units gesehen und verwendet werden.
// In anderen Programmiersprachen wäre dieser Abschnitt Public.
interface
// Alle Units die hier eingebunden sind werden von dieser Unit gesehen und deren öffentlichen Bestandteile
// können in dieser Unit gesehen und damit verwendet werden.
// Beispiel:
Uses
Windows, Sysutils;
// Hier schreiben Sie alle Konstanten, Typdefinitionen und Variablen hin, die von anderen Units gesehen werden sollen.
// Hier schreiben Sie alle Köpfe von Prozeduren, Funktionen, Objekten und Klassen hin, die von anderen Units gesehen werden sollen.
Ich hab mal die beiden Passagen, die mir Logikprobleme machen, fett gemacht. Da ist einmal der Interface-Teil. Alles, was ich da deklariere, ist öffentlich. Okay, sowas kennt man auch von anderen Sprachen her. Dort nennt man es public, bzw. das hat offenbar ähnliche Aufgaben, wie die Interface-Technick bei VB/C#/Java. Das ist - wie die Übersetzung des Wortes es vorgibt - halt die öffentliche Schnittstelle. Liege ich da richtig oder setzt da mein Denkfehler schon an?
Und dann soll man weiter unten vor dem Implementierungsteil nochmal(?) alle Funktions- (usw.) Köpfe hinschreiben, damit sie öffentlich zugänglich sind? Ich dachte, das wäre genau das, was man im Interface-Teil macht und so mache ich das auch zB in Java, dass in einem Interface oder auch in einer abstrakten Klasse nur die Methodenrümpfe stehen (und das Interface ist quasi der Vertrag, den jede impementierende Klasse eingeht, dass sie alle Bestandteile des Interfaces implementiert).
Muss ich jetzt tatsächlich alles doppelt schreiben (wenn ja: warum das denn?) oder wo besteht der Unterschied zwischen diesen beiden Bereichen?