W przedstawionym kodzie zdefiniowano abstrakcyjną klasę Figura oraz dziedziczącą po niej klasę Prostokat z zadanymi polami i konstruktorami. Wskaż najprostszą implementację sekcji /* metody klasy */ dla klasy Prostokat.abstract class Figura
{
abstract double Pole();
abstract double Obwod();
}
public class Prostokat extends Figura
{
private double a;
private double b;
... /* konstruktory */
... /* metody klasy */
}
Kod 1
public double Pole() { return a * b; } public double Obwod() { return 2 * a + 2 * b; }
Kod 2
public double Pole() { return a * b; }
Kod 3
public double LiczPole() { return a * b; } public double LiczObwod() { return 2 * a + 2 * b; }
Kod 4
abstract double Pole() { return a * b; } abstract double Obwod();
Kod 1 jest prawidłowy ponieważ zapewnia implementację abstrakcyjnych metod Pole i Obwod z klasy Figura co jest wymagane dla każdej klasy dziedziczącej po klasie abstrakcyjnej W Javie kiedy klasa dziedziczy po klasie abstrakcyjnej musi zaimplementować wszystkie jej abstrakcyjne metody Kod 1 definiuje metodę Pole która oblicza pole prostokąta jako iloczyn długości boków a i b oraz metodę Obwod która oblicza obwód jako sumę dwóch razy długości a i dwóch razy długości b Jest to zgodne z konwencjami programowania obiektowego które promują enkapsulację i polimorfizm Kod odnosi się bezpośrednio do konkretnego zastosowania jakim jest obliczanie parametrów prostokąta co jest częstym przypadkiem w programowaniu graficznym oraz w aplikacjach matematycznych Implementacja metod w ten sposób zapewnia prostotę oraz czytelność kodu co jest zgodne z dobrymi praktykami w inżynierii oprogramowania Ponadto dzięki poprawnej implementacji można z powodzeniem rozszerzać funkcjonalność obiektową programu umożliwiając jego łatwiejsze modyfikowanie i rozwijanie w przyszłości
Niepoprawne odpowiedzi wynikają z niepełnego zrozumienia koncepcji abstrakcji i dziedziczenia w programowaniu obiektowym Klasa abstrakcyjna w języku Java definiuje metody abstrakcyjne które muszą być zaimplementowane w każdej klasie dziedziczącej Jest to kluczowa zasada która pozwala na tworzenie elastycznych i rozszerzalnych struktur kodu Odpowiedzi które nie implementują wymaganych metod Pole i Obwod w klasie Prostokąt łamią tę zasadę Kod 2 pomija implementację metody Obwod co oznacza że klasa Prostokąt pozostaje niekompletna i nie może być instancjonowana Inne podejścia jak te w Kodzie 3 zmieniają nazwę metod na LiczPole i LiczObwod co nie spełnia kontraktu zdefiniowanego przez klasę Figura ponieważ nie zachowuje integralności interfejsu klasy bazowej Próbując używać abstrakcyjnych metod z implementacją jak w Kodzie 4 łamiemy fundamentalne zasady projektowania obiektowego Zrozumienie tych koncepcji jest kluczowe przy projektowaniu aplikacji które wymagają skalowalności i łatwości utrzymania Praktykując poprawne stosowanie abstrakcji możemy tworzyć kod który jest bardziej modularny elastyczny i odporny na zmiany co prowadzi do bardziej efektywnego procesu rozwoju oprogramowania