Język Java w przeciwieństwie do języka C++ nie udostępnia struktury jako oddzielnej konstrukcji. Jak zatem poradzić sobie z tym problemem?
Odpowiedzią jest użycie innego elementu tego języka, fundamentu programowania obiektowegoprogramowanie obiektoweprogramowania obiektowego – klasy. Pojęcia klasy i obiektowości zostaną szczegółowo omówione w kolejnych e‑materiałach. Do implementacji klasy pełniącej funkcję struktury potrzebujemy jedynie podstawowych informacji.
Ciekawostka
Java jest językiem obiektowym, dlatego już pisząc pierwsze programy, stosowaliśmy klasy. Nawet prosta aplikacja wypisująca na ekranie „Witaj świecie” składa się z co najmniej jednej klasy.
Przeanalizujmy konstrukcję klasy imitującej strukturę:
Linia 1. class Struktura otwórz nawias klamrowy.
Linia 2. public int wartosc1 średnik.
Linia 3. public char wartosc2 średnik.
Linia 4. public boolean wartosc3 średnik.
Linia 5. public String wartosc4 średnik.
Linia 6. public int wartosc5 średnik.
Linia 7. prawy ukośnik prawy ukośnik kolejne wartosci.
Linia 8. zamknij nawias klamrowy.
class Struktura {
public int wartosc1;
public char wartosc2;
public boolean wartosc3;
public String wartosc4;
public int wartosc5;
// kolejne wartosci
}
Definicję struktury zaczynamy od wyrazu class. Jest to informacja dla kompilatora, że tworzymy nową klasę. Następnie podajemy wybraną nazwę struktury, po czym umieszczamy nawiasy klamrowe.
Między nawiasami zapisujemy zmienne, które mają znajdować się w strukturze. Są to pola strukturypole strukturypola struktury. Zauważmy, że mogą mieć one różne typy – właśnie dlatego struktury są takie użyteczne.
Zwróćmy uwagę na wyraz public, który znajduje się przed każdym z typów zmiennych. Bez niego nie uzyskamy dostępu do żadnej ze zmiennych w strukturze.
Ciekawostka
Słowo kluczowe public to jeden z czterech modyfikatorów dostępu. Pozostałe trzy to: protected, private oraz default. W programowaniu obiektowym służą one do ochrony poszczególnych elementów kodu przed nieumyślną ingerencją ze strony programisty. Modyfikator public jest najniższym stopniem zabezpieczeń – nie daje żadnej ochrony.
Tworzenie struktur
Przedstawiony fragment kodu jest tylko definicją struktury – nie możemy jeszcze w niej przechowywać żadnych danych. Aby móc to zrobić, skorzystamy ze znanej nam już składni tworzenia nowej zmiennej, czyli z instancjonowania.
Ważne!
Ze względu na narzucony z góry schemat plików z kodem źródłowym, zwracamy uwagę, gdzie umieścimy kod definiujący strukturę. Istnieje kilka rozwiązań tego zagadnienia, my zaimplementujemy ten kod w pliku z główną klasą, ale poza jej definicją.
Linia 1. class Struktura otwórz nawias klamrowy.
Linia 2. public int wartosc1 średnik.
Linia 3. public char wartosc2 średnik.
Linia 4. public boolean wartosc3 średnik.
Linia 5. public String wartosc4 średnik.
Linia 6. public int wartosc5 średnik.
Linia 7. zamknij nawias klamrowy.
Linia 9. public class Main otwórz nawias klamrowy.
Linia 10. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. Struktura struktura znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 12. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy.
class Struktura {
public int wartosc1;
public char wartosc2;
public boolean wartosc3;
public String wartosc4;
public int wartosc5;
}
public class Main {
public static void main(String[] args) {
Struktura struktura = new Struktura();
}
}
Teraz możemy odwoływać się do poszczególnych elementów struktury za pomocą operatora kropki.
Linia 1. class Struktura otwórz nawias klamrowy.
Linia 2. public int wartosc1 średnik.
Linia 3. public char wartosc2 średnik.
Linia 4. public boolean wartosc3 średnik.
Linia 5. public String wartosc4 średnik.
Linia 6. public int wartosc5 średnik.
Linia 7. zamknij nawias klamrowy.
Linia 9. public class Main otwórz nawias klamrowy.
Linia 10. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. Struktura struktura znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 12. struktura kropka wartosc1 znak równości 15 średnik.
Linia 13. struktura kropka wartosc3 znak równości true średnik.
Linia 14. System kropka out kropka println otwórz nawias okrągły struktura kropka wartosc1 zamknij nawias okrągły średnik.
Linia 15. System kropka out kropka println otwórz nawias okrągły struktura kropka wartosc3 zamknij nawias okrągły średnik.
Linia 16. zamknij nawias klamrowy.
Linia 17. zamknij nawias klamrowy.
class Struktura {
public int wartosc1;
public char wartosc2;
public boolean wartosc3;
public String wartosc4;
public int wartosc5;
}
public class Main {
public static void main(String[] args) {
Struktura struktura = new Struktura();
struktura.wartosc1 = 15;
struktura.wartosc3 = true;
System.out.println(struktura.wartosc1);
System.out.println(struktura.wartosc3);
}
}
Wyjście programu:
Linia 1. 15.
Linia 2. true.
15
true
Rozdzielność struktur
Każda utworzona zmienna o typie struktury jest oddzielnym bytem. Oznacza to, że jeżeli stworzymy trzy różne struktury i nadamy każdemu z ich pól różne wartości, kod będzie poprawny.
Linia 1. class Struktura otwórz nawias klamrowy.
Linia 2. public int wartoscInt średnik.
Linia 3. public String wartoscString średnik.
Linia 4. zamknij nawias klamrowy.
Linia 6. public class Main otwórz nawias klamrowy.
Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. Struktura struktura1 znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 9. struktura1 kropka wartoscInt znak równości 1 średnik.
Linia 10. struktura1 kropka wartoscString znak równości cudzysłów Pierwsza struktura cudzysłów średnik.
Linia 11. Struktura struktura2 znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 12. struktura2 kropka wartoscInt znak równości 2 średnik.
Linia 13. struktura2 kropka wartoscString znak równości cudzysłów Druga struktura cudzysłów średnik.
Linia 15. System kropka out kropka println otwórz nawias okrągły struktura1 kropka wartoscInt plus cudzysłów cudzysłów plus struktura1 kropka wartoscString zamknij nawias okrągły średnik.
Linia 16. System kropka out kropka println otwórz nawias okrągły struktura2 kropka wartoscInt plus cudzysłów cudzysłów plus struktura2 kropka wartoscString zamknij nawias okrągły średnik.
Linia 17. zamknij nawias klamrowy.
Linia 18. zamknij nawias klamrowy.
class Struktura {
public int wartoscInt;
public String wartoscString;
}
public class Main {
public static void main(String[] args) {
Struktura struktura1 = new Struktura();
struktura1.wartoscInt = 1;
struktura1.wartoscString = "Pierwsza struktura";
Struktura struktura2 = new Struktura();
struktura2.wartoscInt = 2;
struktura2.wartoscString = "Druga struktura";
System.out.println(struktura1.wartoscInt + " " + struktura1.wartoscString);
System.out.println(struktura2.wartoscInt + " " + struktura2.wartoscString);
}
}
Wyjście programu:
Linia 1. 1 Pierwsza struktura.
Linia 2. 2 Druga struktura.
1 Pierwsza struktura
2 Druga struktura
Możemy zdefiniować więcej niż jedną strukturę w kodzie. Programy zazwyczaj składają się z dziesiątek, czasami nawet setek struktur (oraz klas), które działają razem, aby stworzyć aplikację.
Słownik
pole struktury
pole struktury
składowa część struktury; w przypadku następującej struktury:
Linia 1. class Struktura otwórz nawias klamrowy.
Linia 2. public int wartosc1 średnik.
Linia 3. public char wartosc2 średnik.
Linia 4. public boolean wartosc3 średnik.
Linia 5. public String wartosc4 średnik.
Linia 6. public int wartosc5 średnik.
Linia 7. zamknij nawias klamrowy.
class Struktura {
public int wartosc1;
public char wartosc2;
public boolean wartosc3;
public String wartosc4;
public int wartosc5;
}
polami struktury są:
wartosc1 i wartosc5 – typu całkowitego,
wartosc2 – typu znakowego,
wartosc3 – typu logicznego,
wartosc4 – łańcuch znaków
programowanie obiektowe
programowanie obiektowe
jeden z paradygmatów programowania; programy utworzone za jego pomocą opierają się na wzajemnych interakcjach między obiektami, czyli instancjami klas