PWSG Ćwiczenia 12 Wszystkie ukończone zadania należy wysłać na adres: sara.m.jurczyk@gmail.com lub sarajurczyk@kul.lublin.pl Zadanie 1: Różnica między zwykłymi polami/metodami, a polami/metodami static przypomnienie. 1. Utwórz nowy projekt o nazwie 01_static (opcja Create Main Class powinna być zaznaczona). 2. Dodaj nową klasę (New -> Java Class) o nazwie AlgorytmyZwykle i umieść w niej metodę schemathornera: public double schemathornera(double x, double[] wsp) { double w = wsp[0]; for (int i = 1; i < wsp.length; i++) { w = w * x + wsp[i]; return w; 3. Następnie dodaj nową klasę o nazwie AlgorytmyStatic i umieść w niej metodę stałą o nazwie schemathornera: public static double schemathornera(double x, double[] wsp) { double w = wsp[0]; for (int i = 1; i < wsp.length; i++) { w = w * x + wsp[i]; return w; 4. Przetestuj działanie obu metod, na przykład poprzez wywołanie w funkcji main poniższych instrukcji: double[] wsp = {1,0,0,1; AlgZwykle alg = new AlgZwykle(); System.out.println(alg.schematHornera(2, wsp)); System.out.println(AlgStale.schematHornera(2, wsp)); Pytanie: Jaka jest różnica pomiędzy tymi metodami?
Zadanie 2: Użycie interface przypomnienie. 1. Utwórz nowy projekt o nazwie 02_Interface. 2. Dodaj interface (New -> Java Interface) o nazwie Funkcja posiadający metodę: double obliczwartosc(double x); 3. Utwórz nową klasę o nazwie FunkcjaLiniowa implementującą interfejs Funkcja. Klasa ta powinna posiadać pola prywatne: private double a, b; oraz konstruktor ustawiający wartości pól na podstawie parametrów. 4. Zwróć uwagę, iż skoro utworzona przez Ciebie klasa FunkcjaLiniowa implementuje interfejs Funkcja, klasa ta musi posiadać implementacje metod zawartych w tym interfejsie. Zaimplementuj teraz metodę obliczwartosc, która zwraca wartość funkcji liniowej (tzn. a*x+b). 5. Utwórz nową klasę o nazwie FunkcjaStala implementującą interfejs Funkcja. Klasa ta powinna posiadać pole prywatne: private double c; // wartość funkcji stałej oraz konstruktor ustawiający wartość pola na podstawie parametru. 6. Klasa FunkcjaStala implementuje interfejs Funkcja, a zatem również musi posiadać swoją implementację metody obliczwartosc. Zaimplementuj tą metodę tak, aby zawracała wartość funkcji stałej. 7. Przetestuj działanie obu metod. Wykorzystaj do tego dodatkową metodę statyczną wartoscfunkcji utworzoną w głównej klasie, która zwraca wartość wybranej funkcji w podanym punkcie x. Przykładowe testowanie może wyglądać następująco: public static void main(string[] args) { Funkcja funkcjalin = new FunkcjaLiniowa(2, -1); System.out.println(wartoscFunkcji(funkcjaLin, 1)); Funkcja funkcjast = new FunkcjaStala(-7); System.out.println(wartoscFunkcji(funkcjaSt, 1010)); public static double wartoscfunkcji(funkcja f,double x){ return f.obliczwartosc(x); Praca domowa na ocenę: dodaj funkcję 3. stopnia oraz funkcję wielomianową (wykorzystaj schemat Hornera do policzenia jej wartości).
Zadanie 3: Dziedziczenie komponentów. 1. Przygotuj klasę Punkt (New -> Java Class) przechowującą współrzędne punktu o współrzędnych x i y będących liczbami rzeczywistymi. W klasie umieść konstruktory, gettery i settery oraz metodę tostring: 2. Utwórz klasę Koło dziedziczącą po klasie Punkt, posiadającą pole rzeczywiste r określające promień koła. W klasie umieść konstruktory, gettery, settery oraz metodę tostring. Dodaj metody pozwalające na obliczenie pola i obwodu koła: Metody pole oraz obwod: public double pole(){ return Math.PI*c*c; public double obwod(){ return 2*Math.PI*c; 3. Zadeklaruj dowolne obiekty reprezentujące punkt i koło, np. Punkt p = new Punkt(3,5); Kolo k = new Kolo(8,p); a następnie przetestuj działanie metod pole i obwód. 4. Dodaj nową formatkę (New -> JFrame Form) o nazwie MainFrame i umieść na niej komponent Panel.
5. Utwórz nową klasę MyPanel dziedziczącą po JPanel. Zaimplementuj w niej metodę paint: 6. W podobny sposób nadpisz w klasie MyPanel metodę repaint. 7. Teraz musimy przypisać do panelu nasz własny kod. W tym celu kliknij prawym przyciskiem myszy na panelu i wybierz opcję Customize Code: a. Zmień opcję default code na custom creation: b. Zmień znajdujący się tam kod, ustawiając dla jpanel1 Twoją klasę MyPanel:
8. Aby uruchomić program wraz z widoczną formatką, dodaj do funkcji main kod: MainFrame mf = new MainFrame(); mf.setvisible(true); Tym razem, pomimo zmiany rozmiaru okna, nasz napis nie znika! Zadanie 4: Stwórz program, który rysuje uśmiechniętą buźkę. 1. Utwórz nowy projekt (opcję Create Main Class pozostaw zaznaczoną), a następnie dodaj nową formatkę (New -> JFrame Form) o nazwie MainFrame i umieść na niej komponent Panel.
2. Wykorzystaj instrukcję z zadania 3 i podpunktów od 5 do 8, aby na panelu narysować uśmiechniętą buźkę. W utworzonej przez Ciebie klasie dziedziczącej po JPanel (patrz zadanie 4 pkt. 5) zaimplementuj metodę paint w poniższy sposób: a. aby narysować twarz i oczy wykorzystaj filloval np: b. do narysowania ust wykorzystaj drawarc i dodaj do metody paint na przykład poniższy kod: c. pamiętaj, aby przypisać do panelu kod z utworzonej przez Ciebie klasy z metodą paint i repint (patrz zadanie 4 pkt. 7). 3. Rozwiń program tak, aby narysować dwie buźki - jedną uśmiechniętą, a drugą smutną. Zadanie 5 zadanie dodatkowe: Spróbuj zmodyfikować zadanie 2 z ćwiczeń z poprzedniego tygodnia tak, aby kształt elipsy i kwadratu nie znikały wraz ze zmianą rozmiaru okna (wskazówka: klasa musi posiadać pole int przechowujące informacje o typie figury do odrysowania).