Zepchnięcie o "poziom niżej" w kontekście obsługi wyjątków (i zapewne nie tylko)

0

Od dłuższego czasu wyszukuję to sformułowanie (poziom wyższy i niższy, lower and higher-level methods) po polsku i po angielsku, ale nigdzie nie widzę jednoznacznego wyjaśnienia a la definicja, co dokładnie oznacza. (Co najwyżej wyskakują mi radosne opowieści o tym, że niżej to bliżej hardware'u.) Dlatego chciałabym skonfrontować swoje zrozumienie na podstawie kontekstu. "Klauzula throws sprowadza się do “zepchnięcia” odpowiedzialności obsłużenia wyjątku o poziom niżej, do metody wywołującej". Patrzę na przykładowy kod (poniżej) i rozumiem to tak, że OK - w jednym miejscu jest definicja naszej metody, gdzie wyjątku jeszcze nie ruszamy, tylko rzucamy, a w drugim jest miejsce, w którym zostaje ona wywołana w metodzie main (i tam obsłużona). Tylko dlaczego mówimy w tym kontekście, że metoda main znajduje się "o poziom niżej"? Czy idę w dobrą stronę rozumując, że jeśli ona zawiera wywołanie "naszej" metody, to może chodzi po prostu o to, że jest "na zewnątrz" względem owego wywołania, a im bardziej "do środka", tym wyższy poziom abstrakcji, więc higher level?

public class CheckedExceptions {
    public static void main(String[] args) {
        CheckedExceptions instance = new CheckedExceptions();
        try {
            instance.methodWithCheckedException();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    private void methodWithCheckedException() throws IOException {
        throw new IOException();
    }
}
1

Daj sobie spokój z jakimiś poziomami wyższymi czy niższymi bo to nic nie mówi.
Po prostu słowo throws przy metodzie mówi, że może ona rzucić wyjątek i musi on zostać obsłużony w metodzie z której tę pierwszą metodę będziemy wołać.
Dla mnie lepsze określenie to 'na zewnątrz'.
Nie widzę tam nic z higher i lower level a tym bardziej z poziomami abstrakcji :]

0

Dobrze wiedzieć, że nie zwariowałam. Dzięks :) Mnie też bardziej logiczne wydaje się "na zewnątrz". Pytałam, bo zetknęłam się z tym wyżej/niżej w sporej liczbie źródeł, więc chciałam zweryfikować gnębiącą mnie myśl "To chyba jednak nie jest przypadek, tzn. dziwoląg stworzony przez jednego człowieka na kacu".

I teraz dzięki Twojemu potwierdzeniu dotarło do mnie wyjaśnienie - w tutorialach ludzie przepisują własnymi słowami dokumentację, a tam stoi jak wół "Sometimes, it's appropriate for code to catch exceptions that can occur within it. In other cases, however, it's better to let a method further up the call stack handle the exception". "Further up the call stack" ma już jakąś logikę, w przeciwieństwie do "Jeżeli jakaś metoda – konstruktor – wymaga od nas obsługę wyjątków to możemy go 'wypchnąć wyżej' przy użyciu słowa kluczowe throws" czy "Throws to zepchnięcie odpowiedzialności obsłużenia wyjątku o poziom niżej, do klasy wywołującej" (cytaty z prawdziwych tutoriali, z których skądinąd dobrze mi się uczy). Poziom czego, niżej od czego? I potem taki twór zaczyna żyć własnym życiem i przypominać jakiś Profesjonalny Keyword o znaczeniu, które przecież może w przyszłości okazać się superistotne ^.^

Chyba rzucę w kąt wszystkie autorskie opracowania i będę czytać już tylko dokumentację :D Chociaż będzie mi w niej brakowało humoru niektórych "tutorialistów", to jest przynajmniej logiczna.

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