Jak zaimplementować abstrakcję danych w Javie?

Opublikowany: 2022-05-17

Abstrakcja, polimorfizm, enkapsulacja i dziedziczenie to cztery podstawowe elementy programowania obiektowego. Jedna z nich, abstrakcja danych, zostanie szczegółowo omówiona w następnym artykule. Dowiemy się również, jak wykonać abstrakcję danych w Javie.

Spis treści

Co to jest abstrakcja danych?

Abstrakcja danych to cecha charakterystyczna, w której użytkownikowi pokazywane są tylko najważniejsze szczegóły. Użytkownik jest nieświadomy trywialnych lub nieistotnych szczegółów. Na przykład samochód jest traktowany jako całość, a nie jego odrębne części. Praktyka identyfikowania tylko potrzebnych atrybutów przedmiotu przy jednoczesnym odrzucaniu nieistotnych informacji jest znana jako abstrakcja danych.

Mówiąc prościej, abstrakcja danych wyświetla użytkownikowi ważne elementy, jednocześnie ukrywając nieistotne elementy.

Używamy słowa kluczowego „abstract” do implementacji abstrakcji za pomocą klas i interfejsów. W klasach abstrakcyjnych możemy mieć zarówno metody abstrakcyjne, jak i konkretne.

Czym są klasy abstrakcyjne?

W programowaniu zorientowanym obiektowo klasa abstrakcyjna to klasa, która deklaruje jedną lub więcej metod abstrakcyjnych. Jedyna różnica między abstrakcyjnymi a zwykłymi klasami Javy polega na tym, że klasy abstrakcyjne zawierają słowo kluczowe abstract, podczas gdy zwykłe klasy Javy nie zawierają. W przypadku deklaracji klasy abstrakcyjnej używamy słowa kluczowego abstract przed nazwą klasy. W klasach mogą występować zarówno metody abstrakcyjne, jak i konkretne. Jednak metody abstrakcyjne nie mogą być obecne w zwykłych klasach. Klasa z co najmniej jedną metodą abstrakcyjną jest określana jako klasa abstrakcyjna.

Jego składnia to:

publiczna klasa abstrakcyjna Nazwa_klasy

{

streszczenie publiczne Nazwa_Metody();

}

Przykładem implementacji klasy abstrakcyjnej jest:

//abstrakcyjna nazwa klas

klasa abstrakcyjna DemoClass

{

//abstrakcyjna nazwa metody

streszczenie void disp();

}

//kontynuacja klasy abstrakcyjnej

public class MainClass rozszerza DemoClass

{

//definiowanie treści metody klasy abstrakcyjnej

nieważne wyświetlanie()

{

System.out.println("Wywołano metodę abstrakcyjną.");

}

public static void main(String[] args)

{

MainClass obj = nowa MainClass ();

//wywołanie metody abstrakcyjnej

obj.wyswietl();

}

}

Aby wymienić punktowo:

  • Klasa musi być zdefiniowana jako abstrakcyjna, jeśli ma co najmniej jedną metodę abstrakcyjną.
  • Nie można utworzyć wystąpienia klasy, która została zadeklarowana jako abstrakcyjna.
  • Musisz odziedziczyć klasę abstrakcyjną z innej klasy i dostarczyć implementacje, aby jej metody abstrakcyjne mogły z niej korzystać.
  • Musisz dostarczyć implementacje dla wszystkich metod abstrakcyjnych w klasie abstrakcyjnej, jeśli ją odziedziczysz.

Czym są metody abstrakcyjne?

Metoda abstrakcyjna ma tylko deklarację metody i nie ma implementacji. Metoda abstrakcyjna może być reprezentowana przez metodę bez własnej treści. Metody abstrakcyjne muszą być deklarowane wyłącznie w ramach klas abstrakcyjnych.

Jeśli chcesz, aby klasa miała metodę, ale rzeczywista implementacja tej metody jest określana przez klasy podrzędne, wyznacz metodę jako abstrakcyjną w klasie nadrzędnej.

Zalety abstrakcji danych w programowaniu obiektowym

  • W programowaniu obiektowym abstrakcja zmniejsza złożoność projektowania programu i procesu jego implementacji w oprogramowaniu.
  • Najważniejszą zaletą implementacji abstrakcji w programowaniu Java jest to, że użytkownicy mogą łatwo organizować klasy oparte na podobieństwach, takich jak rodzeństwo, dzięki czemu dziedziczenie danych i migracja danych stają się łatwe i wykonalne.
  • Dziedziczenie jest możliwe. Na przykład:

/* Nazwa pliku : DemoAbstract.java */

public class DemoStreszczenie {

public static void main(String [] args) {

/* nie można napisać i inicjować błędów */

pracownik e = nowy pracownik(„Piotr D.”, „Hartford, CT”, 35);

System.out.println("\n Użyj referencji pracownika i wywołaj MailCheck-");

e.Sprawdź pocztę();

}

}

To pokazuje następujący błąd:

Employee.java:46: Pracownik jest abstrakcyjny; nie można utworzyć instancji

pracownik e = nowy pracownik(„Piotr D.”, „Hartford, CT”, 35);

^

1 błąd

Używamy więc użycia klasy abstrakcyjnej jako:

/* Nazwa pliku : pracownik.java */

pracownik publicznej klasy abstrakcyjnej {

prywatny Ciąg N;

prywatne Ciąg Dodaj;

prywatny int Num;

public Employee (String N, String Add, int Num) {

System.out.println(„Konstruowanie pracownika”);

this.name = N;

this.address = Dodaj;

ta.liczba = liczba;

}

publiczne podwójne compute_pay() {

System.out.println("Wewnętrzny pracownik compute_pay");

zwróć 0,0;

}

public void Sprawdzanie poczty() {

System.out.println(„Wysyłanie czeku do ” + ta.nazwa + ” ” + ten.adres);

}

public String toString() {

zwróć N + ” ” + Dodaj + ” ” + N;

}

public String pobierzNazwę() {

powrót N;

}

public String pobierzAdres() {

powrót Dodaj;

}

public void setAddress(String newAddress) {

Dodaj = nowy adres;

}

public int pobierzNumer() {

powrót Num;

}

}

Kiedy używamy klas abstrakcyjnych lub metod abstrakcyjnych?

Rozważając ogólny przykład „kształtów”, możemy sobie wyobrazić, że jest on używany w odniesieniu do systemu komputerowego wspomagania projektowania lub symulacji gry wideo. Podstawowym typem, o którym tutaj mowa, jest „kształt”, przy czym każdy kształt ma swoje własne atrybuty koloru, rozmiar itp. Określone klasy kształtów – koło, kwadrat, trójkąt itp. są z tego wyprowadzone (dziedziczone), z których każda może mieć dodatkowe unikalne właściwości i zachowania. Na przykład niektóre kształty mogą być symetryczne, podczas gdy inne nie. Zarówno podobieństwa, jak i wyraźne różnice między kształtami są zawarte w hierarchii typów.

W związku z tym kształt może być analogiczny do klasy abstrakcyjnej, podczas gdy różne typy kształtów można określić jako klasy konkretne.

Oto rzeczywisty scenariusz wyjaśniający klasy abstrakcyjne:

// Program Java do demonstrowania abstrakcji

abstrakcyjny kształt klasy {

Kolor sznurka;

abstrakcyjny podwójny obszar();

public abstract String toString();

// klasa abstrakcyjna może mieć konstruktor

kształt publiczny (kolor sznurka)

{

System.out.println("Konstruktor kształtu wywołany");

this.color = kolor;

}

// to jest konkretna metoda

public String getColour() { return color; }

}

klasa Okrąg rozszerza kształt {

podwójne r;

publiczne koło (kolor sznurka, podwójne (r)

{

// wywołanie konstruktora Shape

super(kolor);

System.out.println(„Konstruktor okręgu o nazwie”);

to.r = r;

}

@Zastąp podwójny obszar()

{

return Math.PI * Math.pow(r, 2);

}

@Zastąp publiczny ciąg znaków toString()

{

return „Kolor okręgu to ” + super.getColor()

+ „a obszar to : ” + obszar();

}

}

class Rectangle rozszerza kształt {

podwójna długość;

podwójna szerokość;

publiczny prostokąt (kolor sznurka, podwójna długość,

podwójna szerokość)

{

// wywołanie konstruktora Shape

super(kolor);

System.out.println("Konstruktor prostokąta wywołany");

this.length = długość;

this.width = szerokość;

}

@Override double area() { return length * width; }

@Zastąp publiczny ciąg znaków toString()

{

return „Kolor prostokąta to ” + super.getcolor()

+ „a obszar to : ” + obszar();

}

}

Test klasy publicznej {

public static void main(String[] args)

{

Kształt s1 = nowy Okrąg("Czerwony", 2.2);

Kształt s2 = nowy Prostokąt("Żółty", 2, 4);

System.out.println(s1.toString());

System.out.println(s2.toString());

}

}

Ten segment kodu jest zmodyfikowaną wersją tego tutaj .

Fragment kodu programu, w którym wykorzystywana jest abstrakcja danych w Javie:

// Abstrakcja w Javie

klasa abstrakcyjna ElecBill

{

//metoda abstrakcyjna

abstract float compBill();

}

class Comm rozszerza ElecBill

{

float compBill() {

zwrot 1,00*100;

}

}

klasa Krajowa rozszerza ElecBill

{

float compBill() {

zwrot 0,50*75;

}

}

Wniosek

Abstrakcja danych jest ważnym aspektem programowania obiektowego. W przypadku języków takich jak Java abstrakcje i inne koncepcje OOP, takie jak dziedziczenie, enkapsulacja i polimorfizm, odgrywają kluczową rolę w pisaniu wydajnych programów.

Jeśli chcesz dogłębnie nauczyć się OOP i zdobyć pierwszorzędne umiejętności programistyczne, zalecamy dołączenie do certyfikatu PG związanego z pracą w inżynierii oprogramowania , który ma pomóc uczniom zdobyć umiejętności w zakresie Java, OODAP, DSA, HTML5, CSS3 , JavaScript, MERN, AWS, bazy danych SQL i NoSQL, Spring Boot itp. 5-miesięczny kurs obejmuje dwie specjalizacje – MERN Stack Specialization i Cloud-Native Specialization oraz zapewnia dostęp do sesji doradztwa zawodowego upGrad 360°.

Ucz się kursów rozwoju oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Co to jest polimorfizm? Czym różni się od abstrakcji danych?

Polimorfizm to uogólnienie podobne do abstrakcji danych, ale występuje w czasie wykonywania. Jeśli istnieje mechanizm dostępu do kolekcji różnych typów obiektów, w których nie można ich odróżnić, są one polimorficzne. Tak więc, nawet jeśli nie są identyczne, wszystkie obiekty wewnątrz mają ten sam wygląd i wrażenie. Celem jest radykalne zmniejszenie kodowania. Zamiast pisać wszystkie liczne permutacje dla każdego typu, możesz napisać jedno uniwersalne rozwiązanie.

Jakie są różnice między enkapsulacją a abstrakcją danych?

ENKAPSULACJA - 1. Enkapsulacja ukrywa dane (informacje), natomiast abstrakcja ukrywa szczegóły (ukrywanie implementacji). 2. Abstrakcja programowania obiektowego rozwiązuje problemy na poziomie projektowania. 3. Ze względów bezpieczeństwa hermetyzacja oznacza ukrywanie wewnętrznych informacji lub mechanizmów działania obiektu. ABSTRAKCJA - 1. Podczas gdy enkapsulacja wiąże ze sobą dane i metody, które na niej operują, abstrakcja danych dotyczy ujawnienia interfejsu użytkownika przy jednoczesnym ukryciu szczegółów implementacji. 2. Jest rozwiązywany na poziomie implementacji poprzez enkapsulację. 3. W Javie abstrakcja danych pozwala skoncentrować się na tym, co musi zawierać obiekt informacyjny.

Jakie są cechy odróżniające interfejs od klasy abstrakcyjnej?

Interfejs - 1. Tylko abstrakcyjne metody są częścią interfejsu. 2. Obsługiwane jest wiele dziedziczeń. 3. Nie jest w stanie zaoferować implementacji klasy abstrakcyjnej. 4. W interfejsie dozwolone są tylko publiczne metody abstrakcyjne. 5. W interfejsie można użyć tylko jednej publicznej statycznej zmiennej końcowej. Klasa abstrakcyjna - 1. Abstrakcyjne i nieabstrakcyjne metody można znaleźć w klasie abstrakcyjnej. 2. Dziedziczenie wielokrotne nie jest obsługiwane. 3. Jest w stanie zaimplementować interfejs. 4. W klasie abstrakcyjnej możliwe są zarówno chronione, jak i abstrakcyjne metody publiczne. 5. Z dowolnym specyfikatorem dostępu, klasa abstrakcyjna może mieć końcowe, statyczne lub statyczne zmienne końcowe.