Różnica między uses w interface a Implementation?

0

Kiedy stosować uses w interface a kiedy w Implementation?

3
neytro napisał(a):

Kiedy stosować uses w interface a kiedy w Implementation?

Zawsze, kiedy możesz to zrobić.
W sekcji Interface powinny być tylko te moduły, które są niezbędne dla deklaracji twoich typów w danym module.

4

Sekcje interface oraz implementation oddzielają deklaracje od definicji oraz dane lokalne od globalnych.

W sekcji Interface muszą się znajdować dane, które mają być dostępne na zewnątrz danego modułu. Z reguły w tej sekcji trzyma się typy danych, deklaracje klas i interfejsów, a także stałe i zmienne. Natomiast to co ma być niewidoczne na zewnątrz, powinno być zadeklarowane/zaimplementowane w sekcji implementation.

Małe wyjaśnienie — nazwy tych sekcji sugerują, że w jednej deklaruje się jakieś nagłówki (interface), a w drugiej się je definiuje (implementation). Takie spojrzenie jest zgodne np. z klasami, kiedy to klasę deklaruje się w interface, a jej metody implementuje w implementation. Jednak o ile w tym przypadku jest to mus (podprogramy zdefiniowane w sekcji interface są niezgodne ze specyfikacją języka, spowodują błąd kompilacji), to nic nie stoi na przeszkodzie, aby klasy deklarować i definiować w implementation.

Wiem, że to może wydawać się zagmatwane, ale takie nie jest. Po prostu w przypadku klas oraz podprogramów, deklarować je można w obu sekcjach, ale definiować je można wyłącznie w sekcji implementation. Wszystko inne można deklarować w obu sekcjach, w zależności od tego jaką mają mieć widoczność.



Rozgadałem się, a to nie o dane chodzi, a o uses. :D

Moduły można dołączać w obu sekcjach. Sam preferuję takie podejście, że w interface dodaję tylko te moduły, które są konieczne do deklaracji danych znajdujących się w tej sekcji. Moduły wymagane na potrzeby danych oraz definicji metod (i innych podprogramów) dołączam w implementation. Czyli ogólnie, aby widoczność była jak najmniejsza.

Tutaj ważne też jest to, jakie moduły chce się dołączyć w uses. Jeśli chodzi o moduły z biblioteki standardowej lub komponentów, a także zewnętrznych bibliotek, to masz pełną dowolność, choć sugeruję podejście z poprzedniego akapitu. Natomiast jeśli chodzi o używanie własnych modułów, to deklaruj je w implementation zawsze kiedy możesz, aby uniknąć problemów z circular unit reference.

1 użytkowników online, w tym zalogowanych: 0, gości: 1