Podręcznik konstruktora GE Jghc60gej jest kompletnym zestawem dokumentacji technicznej w języku angielskim, który został przygotowany specjalnie dla konstruktorów GE Jghc60gej. Podręcznik zawiera szczegółowe informacje dotyczące budowy, instalacji, konfiguracji, działania, wymagań bezpieczeństwa i wszelkich innych informacji niezbędnych do skonstruowania i działania systemów, które będą oparte na tym produkcie. Podręcznik zawiera również wszystkie informacje o produkcie, w tym wszelkie wymagane ostrzeżenia, procedury i regulacje przepisów dotyczące bezpieczeństwa i użytkowania.
Ostatnia aktualizacja: Podręcznik konstruktora Ge Jghc60gej
Do tej pory tworzyliśmy obiekty klas używając słowa kluczowego new, po którym następowała nazwa konstruktora klasy, której obiekt chcieliśmy utworzyć, nawiasy i średnik: Po utworzeniu obiektu, nadawaliśmy jego polom wartości albo poprzez settery, albo przez bezpośrednie odwołanie się do tych pól (tego drugiego sposobu nie będziemy już stosować na rzecz wykorzystania setterów): Takie inicjalizowanie pól obiektu jest co prawda jedną z możliwości, ale niezbyt wygodną – gdybyśmy mieli do ustawienia pięć pól, to musielibyśmy na rzecz danego obiektu wywołać pięć setterów, by ustawić każde z nich. Mamy jednak inną możliwość – napisać własny konstruktor. Język Java, jak i inne języki obiektowe, udostępnia specjalny rodzaj metod nazywanych konstruktorami, które służą do inicjalizacji obiektów klasy. Konstruktory mają dwie cechy specjalne, które wyróżniają je na tle innych metod: Na początku tego kursu poznaliśmy konwencję nazewniczą obiektów w Javie – wedle niej, nazwy zmiennych i metod powinny zaczynać się od małej litery – konstruktory są wyjątkiem od tej reguły, ponieważ muszą nazywać się tak samo, jak nazwa klasy – a jak wiemy, nazwę klas, także zgodnie z konwencją, zawsze zaczynamy od wielkiej litery. Zobaczmy pierwszy przykład konstruktora w klasie Produkt: Nazwa pliku: Produkt. java Klasa Produkt posiada jeden konstruktor – jego cechy to: Zobaczmy powyższy konstruktor klasy Produkt w akcji: Nazwa pliku: Warzywniak. java Tym razem nawiasy po nazwie klasy, której obiekt tworzymy, nie są puste – w nawiasach zawarliśmy argumenty konstruktora utworzonego w klasie Produkt. Po uruchomieniu tego programu, na ekranie zobaczymy: Produkt o nazwie Papryka kosztuje 5. 0 Wartości przesłane jako argumenty konstruktora zostały przypisane do pól cena i nazwa, co widać po wypisaniu tekstowej reprezentacji obiektu papryka na ekran. Wróćmy do klasy Sklep, z której niedawno korzystaliśmy – tworzyliśmy w niej dwa obiekt typu Produkt: Spróbujmy jeszcze raz skompilować i uruchomić powyższy program. Niespodziewanie, próba kompilacji kończy się następującym błędem: Sklep. java:3: error: constructor Produkt in class Produkt cannot be applied to given types;^required: double, Stringfound: no argumentsreason: actual and formal argument lists differ in lengthSklep. java:4: error: constructor Produkt in class Produkt cannot be applied to given types;2 errors Wygląda na to, że dodanie do klasy Produkt konstruktora spowodowało, że klasa Sklep przestała działać – dlaczego tak się stało? Każda klasa, którą napiszemy w języku Java, będzie miała konstruktor – niezależnie od tego, czy go napiszemy, czy nie. Taki konstruktor nazywany jest konstruktorem domyślnym i jest dla nas generowany automatycznie przez kompilator języka Java w jednym, konkretnym w przypadku: gdy my, jako autorzy klasy, nie dostarczymy sami konstruktora dla klasy. Konstruktor domyślny: Tworząc obiekty klas, które pisaliśmy w tym rozdziale, korzystaliśmy cały czas, nie wiedząc o tym, z konstruktorów domyślnych, wygenerowanych dla nas przez kompilator, na przykład w klasie Sklep: W powyższym fragmencie kodu, używaliśmy konstruktora domyślnego. Po dodaniu do klasy Produkt poniższego konstruktora: kompilator nie musiał już generować konstruktora domyślnego dla naszej klasy Produkt, ponieważ sami dostarczyliśmy konstruktor tej klasy. Z tego powodu, klasa Sklep przestała działać, ponieważ wykorzystywany w niej do tej pory konstruktor domyślny (przyjmujący zero argumentów) przestał istnieć w klasie Produkt! Co możemy zatem zrobić, aby kod klasy Sklep zaczął działać? Mamy dwa wyjścia: Spróbujmy dodać drugi konstruktor do klasy Produkt: Do klasy Produkt dodaliśmy drugi konstruktor, który nie przyjmuje żadnych argumentów i nie wykonuje żadnych instrukcji. Gdy teraz spróbujemy skompilować i uruchomić klasę Sklep, na ekranie zobaczymy: Nazwa pierwszego produktu to: CzeresnieCena pierwszego produktu to: 8. 0Produkt o nazwie Herbata czarna kosztuje 12. 0 Dodatkowy konstruktor, wzorowany na konstruktorze domyślnym, spowodował, że kod zaczął ponownie działać. Jak widać, klasa może mieć więcej niż jeden konstruktor. Klasy mogą mieć wiele konstruktorów – tyle, ile uznamy za stosowne. Z racji tego, że konstruktory są metodami, to aby mieć więcej niż jeden konstruktor, każdy z nich musi różnić się liczbą, typem, lub kolejnością argumentów (co wiemy z rozdziału o przeładowywaniu metod). Kiedy możemy potrzebować więcej niż jednego konstruktora? W poprzednim przykładzie mieliśmy dwa konstruktory – pierwszy nie przyjmował argumentów i nie wykonywał żadnych operacji, a drugi inicjalizował oba pola obiektu przesłanymi do niego argumentami: Czasami możemy chcieć zainicjalizować od razu pola obiektu pewnym wartościami – innym razem możemy nie chcieć od razu podawać wszystkich wartości, tylko uzupełnić je później. Często spotykanym przypadkiem w klasach, które mają wiele pól, jest posiadanie kilku konstruktorów, z których każdy inicjalizuje inny zestaw pól – od konstruktora, który zainicjalizuje wszystkie, do takiego, który nie zainicjalizuje żadnych. Często w takich przypadkach polom niezainicjalizowanym przypisywane są pewne domyślne (dla obiektów danej klasy) wartości. Spójrzmy na poniższy przykład: Nazwa pliku: Film. java Klasa Film ma cztery konstruktory – pozwalają one na ustawienie pewnych pól, przesyłając ich wartości jako argumenty, a pozostałe inicjalizują wartościami domyślnymi. Mamy więc cztery sposoby na utworzenie obiektu klasy Film: Powyższy fragment kodu wykorzystuje każdy z czterech konstruktorów klasy Film. Wróćmy do konstruktorów – widzimy w kodzie klasy Film, że wielokrotnie powtarzamy te same fragmenty kodu – każdy konstruktor inicjalizuje wszystkie pola tworzonego obiektu. W poprzednich rozdziałach uczyliśmy się, że duplikacja kodu nie jest dobrą praktyką – na szczęście, w tym przypadku język Java udostępnia nam sposób na zwięźlejsze zapisanie kodu klasy Film. Zamiast w każdym konstruktorze ustawiać wszystkie pola, możemy oddelegować ustawienie ich innemu konstruktorowi tej samej klasy – wywołamy go jak każdą inną metodę, podając argumenty. Aby wywołać z konstruktora inny konstruktor, korzystamy z poznanego już słowa kluczowego this, po którym następują nawiasy i ewentualne argumenty – spójrzmy na drugą wersję klasy Film: Nazwa klasy: Film. java W każdym z konstruktorów, poza czwartym, skorzystaliśmy z możliwości wywołania innego konstruktora – konstruktorem, który wywołujemy, jest czwarty konstruktor, który inicjalizuje wszystkie pola tworzonego obiektu przesłanymi do niego argumentami. Każdy z pozostałych konstruktorów wywołuje go z odpowiednimi wartościami – część wartości pochodzi z argumentów tych konstruktorów, a cześć ustawiamy "na sztywno" jako wartości domyślne. W ten sposób skróciliśmy znacząco kod. Istnieją dwie zasady odnośnie wywoływania innych konstruktorów: Spójrzmy najpierw na punkt 1 – poniższy kod spowodowałby błąd kompilacji: Jednakże moglibyśmy zapisać konstruktory naszej klasy Film w następujący, poprawny sposób: W tym (poprawnie działającym) przypadku pierwszy konstruktor wywołuje drugi, drugi korzysta z trzeciego, który, finalnie, używa konstruktora czwartego. Druga zasada wspominała o kolejności instrukcji – wywołanie innego konstruktora musi być zawsze pierwszą instrukcją w konstruktorze – poniższy przykład zakończy się błędem kompilacji: Błąd kompilacji, który zobaczymy, to: Film. java:8: error: call to this must be first statement in constructorthis(" Nic nie stoi jednak na przeszkodzie, by nasze konstruktory zawierały instrukcje po wywołaniu innego konstruktora, na przykład: W rozdziale trzecim "Zmienne" nauczyliśmy się, czym są stałe i jak je definiować. Stałe to takie zmienne, którym wartość nadajemy tylko raz i nie możemy kolejny raz przypisać im wartości. Stałe definiujemy poprzedzając ich nazwę słowem kluczowym final: Po zainicjalizowaniu stałych LICZBA_PI oraz PONIEDZIALEK, wszelkie próby nadania im nowej wartości kończą się przytoczonym powyżej błędem kompilacji. Pola klas także mogą być stałe – po nadaniu im raz wartości, zachowają ją i nie będziemy mogli przypisać im innej wartości – spójrzmy na poniższy przykład: Nazwa pliku: Pojazd. java Nasza klasa zawiera: Zauważmy, że nasza klasa nie ma setterów – nie miałyby sensu, skoro wszystkie pola klasy Pojazd są stałe. Pytanie: czy powyższa klasa skompiluje się poprawnie? Spróbujmy: Pojazd. java:2: error: variable marka not initialized in the default constructorprivate final String marka;Pojazd. java:3: error: variable numerRejestracyjny not initialized in the default constructorprivate final String numerRejestracyjny;Pojazd. java:4: error: variable rokProdukcji not initialized in the default constructorprivate final int rokProdukcji;3 errors Próba kompilacji zakończyła się błędami – kompilator protestuje, ponieważ nigdzie w naszej klasie nie inicjalizujemy stałych pól tej klasy. Moglibyśmy zmienić kod klasy na następujący: W tej wersji klasy Pojazd przypisujemy do stałych pól klasy Pojazd pewne wartości – powyższa klasa skompiluje się bez problemów. Problem jednak nadal występuje, ponieważ.. klasa Pojazd jest nieużywalna, o ile nie zakładamy, że wszystkie pojazdy, jakie kiedykolwiek będziemy potrzebowali, będą Toyotami z numerem rejestracyjnym 123456, wyprodukowanymi w roku 1997. W tej chwili wszystkie obiekty klasy Pojazd, jakie byśmy utworzyli, miałyby takie same wartości przypisane do każdego pola – wszystkie te pola są stałe i raz po przypisaniu im wartości nie możemy już nadać im innej wartości. Aby rozwiązać ten problem, możemy skorzystać z konstruktorów, ponieważ stałe pola, których nie zainicjalizujemy od razu wartością, możemy jeszcze zainicjalizować w konstruktorach – spójrzmy na finalną wersję klasy Pojazd: Do klasy Pojazd dodaliśmy konstruktor, który przyjmuje trzy argumenty – wartości tych argumentów użyjemy do zainicjalizowania stałych pól tworzonego obiektu. Będą to, odpowiednio, pola marka, numerRejestracyjny, oraz rokProdukcji. Powyższy kod kompiluje się bez błędów – co prawda nie nadajemy stałym polom od razu wartości w liniach, w których je definiujemy, ale robimy to w konstruktorze – kompilator analizując kod naszej klasy wie, że nie ma możliwości na utworzenie obiektu klasy Pojazd, który miałby niezainicjalizowane stałe pola – pola, które muszą być zainicjalizowane. Wszystkie obiekty tworzone będą za pomocą konstruktora, który te wszystkie stałe pola uzupełnia wartościami. A gdybyśmy dodali jeszcze jeden konstruktor, który inicjalizowałby tylko dwa z trzech stałych pól? Na przykład, załóżmy, że do klasy Pojazd dodajemy jeszcze jeden, następujący konstruktor: Gdybyśmy teraz spróbowali skompilować klasę Pojazd, to zobaczylibyśmy ponownie błąd o potencjalnym brak inicjalizacji pola rokProdukcji: Pojazd. java:9: error: variable rokProdukcji might not have been initialized}1 error Błąd wynika z faktu, że tym razem istnieje sposób na utworzenie obiektu klasy Pojazd, który miałby niezainicjalizowane, stałe pole – kompilator wychwycił ten problem i zasygnalizował go powyższym błędem już na etapie kompilacji. Spójrzmy jeszcze na wykorzystanie (poprawnej) wersji klasy Pojazd: Wynik na ekranie: Pojazd marki Harley, numer rejestracjny 978654, wyprodukowany w 2017 roku.Pojazd marki Toyota, numer rejestracjny 123456, wyprodukowany w 1997 roku. Zgodnie z konwencją, stałe zazwyczaj zapisujemy wielkimi literami ze słowami rozdzielonymi znakami podkreślenia. Ta konwencja dotyczy stałych, które mają niezmienne, w pewien sposób uniwersalne wartości, jak na przykład liczba Pi. Konstruktory nie muszą być publiczne – możemy napisać klasę, która będzie zawierała prywatny konstruktor: Nazwa pliku: Powitanie. java Zauważ, że klasa Powitanie posiada jeden konstruktor, który jest prywatny. Jeżeli spróbujemy utworzyć obiekt tej klasy, to kompilator zgłosi błąd: Nazwa pliku: UzywaniePowitania. java UzywaniePowitania. java:3: error: Powitanie() has private access in PowitaniePowitanie powitanie = new Powitanie(); Kompilator nie zezwala na kompilację klasy UzywaniePowitania, ponieważ próbujemy w jej metodzie main utworzyć obiekt typu Powitanie, co jest niemożliwe – nie możemy w innej klasie odnieść się do prywatnego konstruktora klasy Powitanie. Jaki jest zatem sens tworzenia prywatnych konstruktorów, skoro nie możemy z nich skorzystać? Jest jedna klasa, która może użyć konstruktora, pomimo tego, że jest prywatny – jest to ta klasa, w której jest on zdefiniowany! W końcu do prywatnych pól i metod (a konstruktor to rodzaj specjalnej metody) mamy dostęp z wnętrza klasy, w której są one zdefiniowane: Do klasy Powitanie dodałem nowe pole statyczne o nazwie INSTANCE, które jest typu Powitanie. Pola i metody statyczne są wspólne dla wszystkie obiektów danej klasy – przeznaczyłem na ich omówienie jeden z kolejnych podrozdziałów. Możemy się do nich odnosić za pomocą nazwy klasy, w której są zdefiniowane. Zauważ, że wywołujemy prywatny konstruktor w celu utworzenia obiektu klasy Powitanie: Kod klasy Powitanie, zapisany w ten sposób, powoduje, że istnieje tylko jeden obiekt tej klasy – ten utworzony w powyższej linii. Jeżeli inne klasy będą chciały korzystać z klasy Powitanie, to będę musiały używać tego jednego, konkretnego obiektu, ponieważ nie będą mogły utworzyć nowych obiektów tej klasy ze względu na prywatny konstruktor. Jest to wzorzec projektowy o nazwie Singleton. Wzorce projektowe to opisane sposoby na zaimplementowanie w kodzie źródłowym rozwiązania pewnego problemu. W przypadku wzorca Singleton, celem jest posiadanie klasy, która używana jest przez inne klasy za pomocą dokładnie jednej instancji (jednego obiektu) tej klasy. Stosując prywatny konstruktor uniemożliwiamy innym klasom na tworzenie obiektów tego typu, a dostarczając jeden publiczny obiekt, utworzony przez tę klasę, zapewniamy, że wszystkie inne klasy będą musiały z niego korzystać: Witaj Bonifacy Jest to jedno z zastosowań prywatnych konstruktorów. Ponadto, moglibyśmy napisać klasę, która będzie zawierała zarówno konstruktory publiczne, jak i prywatne. Publiczne konstruktory byłyby używane spoza tej klasy, a prywatne byłyby do użytku wewnętrznego. Innym przykładem jest użycie konstruktorów prywatnych w klasach, które stosują wzorzec projektowy „Builder”. Służy on do utworzenia obiektu klasy w taki sposób, aby sprowadzało się ono do wywołania kilku metod, za pomocą których ustawimy pola skojarzone z obiektem danej klasy. Gdy ustawimy wszystkie pola, wywołujemy metodę build „obiektu-buildera”, która zwraca utworzony obiekt. Więcej o tym wzorcu opowiem Ci w przyszłości w rozdziale o klasach zagnieżdżonych. Klasy, które posiadają jedynie prywatne konstruktory, nie mogą być rozszerzane, tzn. inna klasa nie może po nich dziedziczyć. Wyjątkiem od tej reguły są klasy zagnieżdżone, które będą tematem jednego z rozdziałów w przyszłości, natomiast dziedziczenie jest tematem rozdziału dziesiątego. Produkt o nazwie Papryka kosztuje 5. 0Produkt czeresnie = new Produkt();
czeresnie. setCena(8. 0);czeresnie. setNazwa("Czeresnie");
public class Produkt {private double cena;private String nazwa;//(1)(2) (3) (4)public Produkt(double cena, String nazwa) {this. cena = cena; // 5this. nazwa = nazwa; // 6}// settery i gettery zostaly pominietepublic String toString() {return "Produkt o nazwie " + nazwa + " kosztuje " + cena;}}
public class Warzywniak {public static void main(String[] args) {Produkt papryka = new Produkt(5. 0, "Papryka"); // 1System. out. println(papryka);}}
public class Sklep {Produkt czeresnie = new Produkt();Produkt herbata = new Produkt();czeresnie. 0);herbata. setCena(12. setNazwa("Herbata czarna");System. println("Nazwa pierwszego produktu to: " + czeresnie. getNazwa());System. println("Cena pierwszego produktu to: " + czeresnie. getCena());System. println(herbata);}}
public Produkt(double cena, String nazwa) {this. cena = cena;this. nazwa = nazwa;}
public Produkt() {}
public class Film {private String tytul;private String rezyser;private double cenaBiletu;public Film() { // 1this. tytul = "<nienazwany film>"; // 5this. rezyser = "<brak rezysera>"; // 5this. cenaBiletu = 20. 0; // 5}public Film(String tytul) { // 2this. tytul = tytul;public Film(String tytul, String rezyser) { // 3this. rezyser = rezyser;public Film(String tytul, String rezyser, double cenaBiletu) { // 4this. cenaBiletu = cenaBiletu;}}
Film tajemniczyFilm = new Film();Film rambo = new Film("Rambo");Film zrodlo = new Film("Zrodlo", "Darren Aronofsky");Film cicheMiejsce = new Film("Ciche miejsce", "John Krasinski", 25. 0);
public Film() {this("<nienazwany film>", "<brak rezysera>", 20. 0);// blad kompilacji! nie mozemy wywolac kolejnego konstruktorathis("<nienazwany film>");}
final double LICZBA_PI = 3. 14;final String PONIEDZIALEK = "Poniedzialek";// blad kompilacji!// error: cannot assign a value to final variable LICZBA_PILICZBA_PI = 5;// error: cannot assign a value to final variable PONIEDZIALEKPONIEDZIALEK = "Piatek";
public class Pojazd {private final String marka; // 1private final String numerRejestracyjny; // 2private final int rokProdukcji; // 3return "Pojazd marki " + marka +", numer rejestracjny " + numerRejestracyjny +", wyprodukowany w " + rokProdukcji + " roku. ";}public String getMarka() {return marka;}public String getNumerRejestracyjny() {return numerRejestracyjny;}public int getRokProdukcji() {return rokProdukcji;}}
public Pojazd(String marka, String numerRejestracyjny) {this. marka = marka;this. numerRejestracyjny = numerRejestracyjny;}
Pojazd motor = new Pojazd("Harley", "978654", 2017);Pojazd samochod = new Pojazd("Toyota", "123456", 1997);System. println(motor);System. println(samochod);
W przypadku pól klas nie stosujemy tej konwencji – pola klas definiujemy jako final,by zapobiec potencjalnemu przypisaniu do pola klasy innej wartości, lecz sama wartość, jako taka, nie musi stanowić uniwersalnej, stałej wartości – dlatego stałych pól w klasie Pojazd nie nazywaliśmy wielkimi literami, lecz, tak jak zawsze, używając camelCase'a. public class Powitanie {private Powitanie() {}public void powitaj(String imie) {System. println("Witaj " + imie);}}
public class UzywaniePowitania {Powitanie powitanie = new Powitanie();}}
public class Powitanie {public static final Powitanie INSTANCE = new Powitanie();
public static final Powitanie INSTANCE = new Powitanie();
Produkt papryka = new Produkt(5. println(papryka);
public class PustaKlasaZDomyslnymKonstruktorem {}Ponieważ konstruktor domyślny będzie automatycznie wygenerowany, możemy napisać:
PustaKlasaZDomyslnymKonstruktorem obiekt = new PustaKlasaZDomyslnymKonstruktorem();
public class PytanieKonstruktor {private int x;public PytanieKonstruktor(int x) {this. x = x;}public void setX(int x) {return "x = " + x;}PytanieKonstruktor o = new PytanieKonstruktor();System. println(o);}}
Odpowiedzi do pytań
Klasa Adres¶
Napisz klasę Adres, która będzie miała następujące pola:
Do klasy Adres dodaj:
Klasa Osoba z konstruktorem¶
Napisz klasę Osoba, która będzie miała następujące pola:
Napisz dwa konstruktory dla klasy Osoba:
Dodaj do klasy Osoba metodę toString oraz main. Utwórz po jednym obiekcie klasy Osoba korzystając z każdego z dostępnych konstruktorów i wypisz je na ekran.
Rozwiązania do zadań
Tytuły: |
|
---|---|
Wydawnictwo: | Trzcianka: SAPA Aluminium Sp. z o. o., [2009] |
Opis fizyczny: | 141 s. / il. / 24 cm. |
Język: | polski |
Słowa kluczowe: | KONSTRUKCJE METALOWE, OBRÓBKA METALI, WYCISKANIE METALI, STOPY ALUMINIUM, WYROBY ALUMINIOWE |
Symbol UKD: | 621. 77:669. 71 |
Egzemplarze
Sygnatura | Księgozbiór | Nr tomu | Nr części | Nr egz. | Miejsce przechowywania | Forma | Rok wydania | Stan wyp. |
---|---|---|---|---|---|---|---|---|
WZ 005764 | Księgozbiór Wydziału Zarządzania | 00 | 00 | 01 | Wydział Zarządzania | Książka Podręcznik | 2009 | w czytelni |
WM 007004 | Księgozbiór WIPMiFS | 00 | 00 | 01 | Wydz. Inż. Proc., Mater. i Fiz. Stos. | Książka Podręcznik | 2009 | w czytelni |
WE 007713 | Księgozbiór Wydziału Elektrycznego | 00 | 00 | 01 | Wydział Elektryczny | Książka Podręcznik | 2009 | w czytelni |
P 008410 | Księgozbiór studencki | 00 | 00 | 01 | Czytelnia Ogólna | Książka Podręcznik | 2009 | w czytelni |
P 008410 | Księgozbiór studencki | 00 | 00 | 02 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | wypożyczona |
P 008410 | Księgozbiór studencki | 00 | 00 | 03 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | dostępna |
P 008410 | Księgozbiór studencki | 00 | 00 | 04 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | dostępna |
P 008410 | Księgozbiór studencki | 00 | 00 | 05 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | dostępna |
P 008410 | Księgozbiór studencki | 00 | 00 | 06 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | dostępna |
Z 093632 | Księgozbiór podstawowy | 00 | 00 | 01 | Magazyn Biblioteki Głównej | Książka Podręcznik | 2009 | dostępna |
Strony dostępne w domenie www. gov. pl mogą zawierać adresy skrzynek mailowych. Użytkownik korzystający z odnośnika będącego adresem e-mail zgadza się na przetwarzanie jego danych (adres e-mail oraz dobrowolnie podanych danych w wiadomości) w celu przesłania odpowiedzi na przesłane pytania.Szczegóły przetwarzania danych przez każdą z jednostek znajdują się w ich politykach przetwarzania danych osobowych.
Wszystkie treści publikowane w serwisie są udostępniane na licencji Creative Commons: uznanie autorstwa - użycie niekomercyjne - bez utworów zależnych 3. 0 Polska (CC BY-NC-ND 3. 0 PL), o ile nie jest to stwierdzone inaczej.