• Nie Znaleziono Wyników

Wykład 4 Dziedziczenie, AWTJava

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 4 Dziedziczenie, AWTJava"

Copied!
35
0
0

Pełen tekst

(1)

Uniwersytet Łódzki

Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej

Dziedziczenie, AWT Java

Wykład 4

(2)

Plan wykładu

 Java Web Start

Dziedziczenie (Inheritance)

 Interfejsy, klasy abstrakcyjne

 Polimorfizm

 AWT

 Layout Manager

(3)

Java Web Start

Uruchamianie aplikacji Javy z pełną funkcjonalnością za pomocą jednego kliknięcia

(

http://java.sun.com/docs/books/tutorialJWS/deployment/webstart/examples/Notepad .jnlp

)

Pobieranie i uruchamianie aplikacji bez konieczności jakiejkolwiek instalacji dla różnych platform

W przypadku, gdy aplikacja korzysta z innej wirtualnej maszyny niż dostępna lokalnie, maszyna ta zostanie pobrana i uruchomiona automatycznie

Użytkownik może uruchomić aplikację poza przeglądarką. Aplikacja jest zapisana w pamięci podręcznej Java Web Start.

Aplikacje z niezaufanych źródeł mogą być uruchamiane w bezpieczny

sposób, ze względu na możliwość zdefiniowania restrykcji np. standardowo aplikacje nie mogą zapisywać danych lokalnie na dysku.

Zapisanie aplikacji lokalnie w pamięci podręcznej gwarantuje zwiększenie

wydajności

(4)

Java Web Start (2)

Aplikacje przechowywane w pamięci podręcznej JWS można podejrzeć za pomocą Java Cach Viewer

control panel\java\general,view

Przygotowanie aplikacji Java Web Start

Rozszerzenie typów MIME obsługiwanych przez serwer o:

application/x-java-jnlp-file

Utworzenie pliku JNLP jako XML z określeniem wybranych tagów

opis tagów:

http://java.sun.com/docs/books/tutorial/

deployment/webstart/deploying.html

Umieszczenie aplikacji w postaci JAR oraz pliku JNLP na serwerze

Dostęp do elementów aplikacji (res) z wykorzystaniem funkcji getResource()

<?xml version="1.0" encoding="utf-8"?>

<!-- JNLP File for Notepad -->

<jnlp spec="1.0+”

codebase="http://java.sun.com/docs/books/tutorialJWS/dep loyment/webstart/examples/"href="Notepad.jnlp”>

<information>

<title>Notepad Demo</title>

<vendor>The Java(tm) Tutorial: Sun Microsystems, Inc.</vendor>

<description>Notepad Demo</description>

<homepage

href="http://java.sun.com/docs/books/tutorial/deployment /webstart/running.html"/>

<description kind="short">ClickMeApp uses 3 custom classes plus several

standard ones</description>

<offline-allowed/>

</information>

<resources>

<jar href="Notepad.jar"/>

<j2se version="1.6+”

href="http://java.sun.com/products/autodl/j2se"/>

</resources>

<application-desc main-class="Notepad"/>

</jnlp>

(5)

Java Web Start (3)

Aplikacje Java Web Start domyślnie uważane są za niezaufane (untrusted)

Standardowe ograniczenia dla aplikacji JWS

Brak dostępu do dysku lokalnego

Pobieranie wszystkich JAR z tego samego serwera

Aplikacja może realizować połączenia wyłączenie do serwera, z którego zostały pobrane pliki JAR

Security Manager nie może być usunięty lub zamieniony

Nie można używać bibliotek natywnych

JNLP API: javax.jnlp

Bezpieczeństwo Java Web Start:

Aplikacje wykonywane w wydzielonym środowisku (sandbox)

Aplikacje podpisane – mogą mieć szersze uprawnienia w lokalnym systemie. Sprawdzana jest

integralność, niezaprzeczalność autentyczność

Ustawienie poziomu

bezpieczeństwa w pliku jnlp:

<security><all-permissions/></security>

(6)

Dziedziczenie

Dziedziczenie jest to mechanizm

paradygmatu programowania obiektowego

Przejmowanie stanu (pola) oraz zachowań (metody) obiektu z którego się dziedziczy

Tworzenie kategorii (generalization): Klasa bazowa stanowi kategorię (rodzinę typów) na bazie której mogą być tworzone inne typy

Nadpisywanie (overriding): zmienianie znaczenia zachowania się typu, z którego dziedziczmy

Ponowne wykorzystanie kodu (co-reuse), w innych typach.

Dziedziczone są wszystkie elementy klasy nadrzędnej z wyjątkiem konstruktorów.

Konstruktor klasy bazowej mogą być wołane z klasy, która dziedziczy.

Odwołanie do członków klasy bazowej po przez „super”. Wołanie konstruktora klasy bazowej: super();

Dwa określenia: klasa bazowa (super klasa, nadklas) i klasa potomna (podrzędna,

podklasa)

FIGURA Pole

Obwód

Pole Obwód

x y

Prostokąt Koło

Pole Obwód

obwód promień

Pole Obwód

(7)

Jednokrotne dziedziczenie

W Javie można stosować wyłącznie jednokrotne dziedziczenie.

Dziedziczenie wielokrotne może powodować nieścisłość – wymagana jest dyscyplina programisty oraz precyzyjna znajomość mechanizmów języka.

Zachowanie polimorficzne możliwe do ociągnięcia po przez zastosowanie

interfejsów.

Co można robić na poziomie podklasy:

Dziedziczone pola mogą być używane bezpośrednio w podklasie

Można deklarować zmienne w podklasie o nazwach takich jak w klasie bazowej.

Niezalecane.

Możliwość deklaracji pól w klasie podrzędnej, które nie są w klasie bazowej.

Odziedziczone metody mogą być wykorzystywane w klasie podrzędnej bezpośrednio.

Możliwość nadpisywania metod z klasy nadrzędnej po przez identyczną deklarację.

Możliwość deklaracji metody statycznej w klasie podrzędnej, która przykryje metodę z klasy nadrzędnej

Możliwość deklaracji nowych metod w podklasie.

Możliwość napisania konstruktora w podklasie, który wywoła konstruktor klasy bazowej.

(8)

typ Object – jako przykład klasy bazowej

Klasa Object znajduje się na samej górze hierarchii dziedziczenia. Wszystkie obiekty dziedziczą po Object.

Klasa Object udostępnia zbiór metod, które powinny w miarę potrzeby zostać przeładowane w tworzonych klasach. Jest ich ok. 50. Przykłady:

protected Object clone() throws CloneNotSupportedException

Implementuje interfejs Clonable.

public boolean equals(Object obj)

wykorzystywana do porównania dwóch obiektów. W podstawowej implementacji tej metody użyto operatora „==„, który daje poprawne wyniki raczej dla typów prymitywnych (porównanie wyłącznie referencji, tzn. czy to ten sam obiekt). Dlatego znając specyfikę klasy należy przeładować tą metodę.

protected void finalize() throws Throwable

wołana w przypadku, gdy obiekt jest niszczony przez Garbage Collector.

public final Class getClass()

zawraca nazwę klasy.

public int hashCode()

zwraca adres w pamięci w postaci heksadecymalnej.

public String toString()

(9)

Delegacja

 Wykonanie zadania przez jakąś metodę jest wykonywane przez inną metodą – jest do tej drugiej metody delegowane przez pierwszą metodę.

 Mechanizm używany w celu ułatwienia zarządzania kodem – wielokrotnego wykorzystania kodu.

 W Javie jest to niepełny mechanizm. W C#

sprytnie zastosowany do obsługi zdarzeń.

(10)

Modyfikatory i rzutowanie obiektów

Podklasa nie dziedziczy elementów klasy bazowej z modyfikatorem private

W przypadku dziedziczenia z klasy, która posiada klasę zagnieżdżoną, ta klasa

zagnieżdżona ma dostęp do pól private klasy bazowej, w której jest zagnieżdżona a tym samym

podklasa ma niebezpośredni dostęp do pól private klasy bazowej.

Należy strać się stosować możliwe najbardziej restrykcyjny

modyfikator dostępu.

Możliwość rzutowania obiektu klasy podrzędnej na typ obiektu klasy bazowej;

Możliwość wymuszonego rzutowania np.:

Rower rower = new Rower();

Object obj = new Rower();

Rower newRower = obj;

(BŁĄD) – kompilator nie wie do jakiego typu został przypisany błąd. Jeśli obj nie jest typu Rower zostanie rzucony wyjątek.

Rower newRower = (Rower) obj;

W celu zabezpieczenia się przed

błędnym rzutowaniem można wykonać następujący test logiczny:

if (obj instanceof Rower) { Rower myBike = (Rower)obj;

}

(11)

Tablica modyfikatorów – zakres widoczności

Modyfikator Class Package Subclass Poza

Public Tak Tak Tak Tak

Protected Tak Tak Tak Nie

Bez mod.*) Tak Tak Nie Nie

Private Tak Nie Nie Nie

*) Bez modyfikatora – jest to tzw. widoczność publiczna, ale wyłącznie ramach pakietu.

Są to tzw. packag-private.

PakietA PakietB

subb

c a

b

Przykład: Określić widoczność

elementów klasy a po przez pozostałe klasy (b, subb, c)

Rozwiązanie Przykładu.

Modyfikator a b subb c

Public Tak Tak Tak Tak

Protected Tak Tak Tak Nie

Bez mod.*) Tak Tak Nie Nie

Private Tak Nie Nie Nie

(12)

Nadpisywanie i ukrywanie metod

Metoda Instancji z taką samą sygnaturą (nazwa oraz lista parametrów) oraz z tym samym zwracanym typem nadpisuje (override) metodę z klasy bazowej

Nadpisywanie pozwala korzystać z typów, które są dla nas prawie wystarczające natomiast częściowo chcemy zmienić ich zachowanie

Przeładowana metoda może zwrócić typ, który jest podtypem metody, która została przeładowana

Możliwość wykorzystania tagu @override w JavaDoc

Metoda, która przeładowuje daną metodą może używać jedynie modyfikatorów

silniejszych. Np. protected jeśli była public i priavte jeśli była public

Metoda klasy (Class Method) z taką samą sygnaturą (nazwa oraz lista parametrów) oraz z tym samym zwracanym typem przykrywa (hide) metodę klasy bazowej

Wersja metoda przykrytej, która

faktycznie zostanie wywołana zależy od tego czy wołamy na klasie bazowej czy podklasie.

Przykład dla metody klasy

Natomiast w przypadku wystąpienia w podklasie pól o takich samych

nazwach jak w klasie bazowej

następuje ich przykrycie przez pola z podklasy. Odwołanie do tych pól możliwe jedynie przez „super”

Uwaga! Jeśli nie chcemy, aby dana metoda została nadpisana należy ją zadeklarować z modyfikatorem final. Wiele metod z Object jest final.

Również jeśli nie chcemy, aby dana klasa była rozszerzana stosujemy final. Przydatne w sytuacji, gdy implementujemy typy niemutowalne np.. String.

(13)

Polimorfizm

Mechanizm paradygmatu programowania obiektowego

Polimorfizm pozwala wirtualnej maszynie na określenie w

trakcie wykonywania

programu, która wersja metody powinna zostać wywołana. W trakcie kompilacji nie można stwierdzić jaką referencję będzie przechowywała zmienna typu computer

toString()

toString() toString()

notebook workstation computer

(14)

Interfejsy

Abstrakcyjny typ pozwalający na specyfikację interfejsów

Obiekty definiują sposób zachowania po przez metody jakie eksponują – określają tym samym swój interfejs.

Wykorzystanie w klasie interfejsu wymaga implementacji wszystkich jego metod, chyba, że klasa jest klasą abstrakcyjną

Interfejs deklaruje się za pomocą słowa kluczowego interface

Interfejsy mogą zawierać jedynie metody oraz pola statyczne (definiowane jako static lub final).

Można pominąć te modyfikaotry.

Zastosowanie interfejsu w danej klasie oznaczane jest za pomocą słowa implements

Pozwala na użycie obiektu, bez koniczności znajomości jego typu np. przy sortowaniu – nie musimy wiedzieć dokładnie jaki typ obiektu będzie sortowany.

[modyfikator] interface InterfaceName [extends inne interfejsy] {

//deklaracje stalych

// deklaracje metod abstrakcyjnych }

Przykład:

public interface Zwierze { void jedz(jedzenie j);

}

public class Kot implements Zwierze { public boolean chasePrey(Prey p) { // programming to chase prey p }

public void eatPrey (Prey p) { // programming to eat prey p }

}

(15)

Interfejsy (2)

Interfejsy wykorzystywane do realizowania mechanizmu callback.

Oczywiście interfejs może rozszerzać inne interfejsy.

Interfejs może w przeciwieństwie do klas rozszerzać więcej niż jeden interfejs.

Interfejs, który nie jest wyspecyfikowany jako public widoczny jest jedynie dla klas w tym samym pakiecie. Mają zastosowanie zasady widoczności dla modyfikatorów przy dziedziczeniu klas.

Zalecenie! W przypadku rozszerzenia danego interfejsu o jakąś

metodę należy stworzyć nowy interfejs udostępniający zakładaną

funkcjonalność. Dodanie do uprzedniego interfejsu spowoduje

wygenerowanie błędu w klasach, które go implementują.

(16)

Klasy abstrakcyjne

Klasa abstrakcyjna, to klasa zadeklarowana z modyfikatorem abstract

Nie może być instancją natomiast może być dziedziczona

Może ale nie musi zawierać metod abstrakcyjnych

Natomiast klasa, która posiada metody abstrakcyjne musi być zadeklarowana jaka abstract

Metoda abstrakcyjna to metoda, która nie ma ciała

Klasa, która dziedziczy z klasy abstrakcyjnej musi implementować wszystkie metody klasy abstrakcyjnej lub być zadeklarowana jako abstract.

//Przykład metody abstrakcyjnej

abstract void doSomething(double zm1, double zm2);

//przykład klasy

public abstract class klasaAbstrakcyjna { //deklaracja pól

int zm1;

int zm2;

//deklarcja metod nieabstrakcyjnych public int suma(int x, int y){

return x+y;

}

//deklaracja metod abstrakcyjnych

public abstract int roznica(int x, int y);

}

(17)

Interfejs vs klasy abstrakcyjne, przykład …

W klasie abstrakcyjnej w przeciwieństwie do interfejsów mogą być pola non-static oraz mogą być implementacje metod.

Klasy abstrakcyjne mogą być wykorzystywane do koncepcji współdzielenia kodu.

Obiekty graficzne posiadają pewien podobny zbiór stanów oraz zachowań

Zamodelowanie w postaci hierarchii dziedziczenia z klasy abstrakcyjnej:

stan np. pola: aktualnaPozycja

zachowanie np. metody: przesunDo(), odrysuj(), zmienRozmiar()

Klasa abstrakcyjna może dziedziczyć niepełne zachowanie po interfejsie, tym samym nie musi implementować wszystkich metod interfejsu. Natomiast klasa, która dziedziczy po klasie abstrakcyjnej musi implementować pozostałe metody.

Obiekt graficzny

Prostokąt

linia krzywa

Koło

Przykład: http://www.developer.com/java/article.php/803891

(18)

Wprowadzenie do AWT

 AWT – Abstract Window Toolkit,

wykorzystywany do budowy graficznych interfejsów

 AWT do obsługi elementów interfejsu

użytkownika wykorzystuje natywne GUI. Wygląd GUI w tym przypadku jest analogiczny do GUI systemu operacyjnego, na którym uruchamiana jest aplikacja.

 Jest to tzw. ciężki typ kontrolek, gdyż wołane są

odpowiednie funkcje systemowe

(19)

Graphical User Interfece

GUI zbudowane jest z elementów graficznych nazywanych

komponentami. Komponentami są np. przyciski, pola tekstowe, paski, etc…

Klasą bazową dla wszystkich typów komponentów graficznych jest Component -> patrz hierarchia dziedziczenia

Komponenty znajdują się w kontenerach. Kontenery zarządzają rozkładem komponentów, w których się znajdują.

Kontenery są również komponentami i tym samym mogą być umieszczane w innych kontenerach.

Kontenery są instancją klasy Container lub jej podklas

(20)

Odświeżanie komponentów graficznych

Powodowane przez system

Komponent graficzny powinien zostać narysowany po raz

pierwszy

Komponent zmienił rozmiar

Zawartość komponentu została przysłonięta

Powodowane przez aplikację

Aplikacja uznaje, że jej stan wewnętrzny wymaga

przemalowania komponentu

Powodowane przez system

Z wątku obsługi zdarzeń zostanie wywołana metoda paint()

Powodowane przez aplikację

Aplikacja woła repaint()

Z wątku obsługi zdarzeń zostanie wywołana metoda update() (scalanie wywołań !)

Standardowa realizacja

update() najpierw wypełni tło aktualnym kolorem tła

komponentu, następnie

wywoła metodę paint()

(21)

Metoda paint()

 Programista dostarcza implementację metody, tego co de facto chce narysować

 Należy przeładować metodę:

public void paint(Graphics g)

 Graphics przedstawia kontekst graficzny, dla którego można ustawić: kolor, czcionkę, współrzędne, region obcinania

 Kod związany z rysowaniem powinien być umieszczany w tylko w ciele metody paint() lub metodach przez nią wołanych.

 Przykład metody paint()

(22)

Klasa Komponent – wybrane metody (1)

getBackground/setBackground

getForeground/setForeground

Zmiana domyślnego koloru przedniego planu

Kolor jest dziedziczony przez obiekt Graphics dla komponentu

getFont/setFont

Ustawia/zwraca aktualny kolor czcionki

Kolor jest dziedziczony przez obiekt Graphics dla komponentu

paint

Wołana za każdym razem, kiedy użytkownik wywołuje metodę

repaint lub następuje zmiana komponentu (przesunięcie okienka,

przesłonięcie, etc …)

(23)

Klasa Komponent – wybrane metody (2)

setVisible

eksponuje lub ukrywa komponenty

szczególnie użyteczne dla ramek i okienek dialogowych

setSize/setBounds/setLocation

getSize/getBounds/getLocation

ustawia fizyczne aspekty komponentu: rozmiar oraz pozycję

list

wyświetla informacje na temat komponentu. Zawiera użyteczne informacje do debugowania.

invalidate/validate

wskazuje menadżerowi rozkładu, żeby przywrócić poprzedni

getParent

zwraca okno, w którym jest zamknięty lub null

(24)

Lightweight components

 Lekkie komponenty dziedziczą bezpośrednio z klasy Component, nie z natywnych

dostarczanych przez system (tzw. peer).

 Implementują bezpośrednio look’n’feel, rzadziej delegując go do systemu.

 Lekkie komponenty efektywniej gospodarują

zasobami. Mogą być przeźroczyste i nie muszą być prostokątami.

 Przykładami zbioru lekkich komponentów jest

Swing.

(25)

Klasa Canvas

Jest to miejsce, w którym można rysować

Płótno nie ma żadnego menadżera rozkładu, nie może zawierać innych komponentów

Dziedziczy się z Canvas i przeładowuje funkcję paint() w celu tworzenia własnego komponentu.

Np. do tworzenia

obrazkowego przycisku

Wymiarowanie Płótna:

setSize(wysokosc, szerokosc)

Dodawania Płótna do aktualnego okna:

add(plotno)

lub dodawanie do okna z LayoutManager

add(canvas,

BorderLayout.Region_Name);

Malowanie zawartości. Przeładowanie metody Pain

public void paint(Graphics g) { setBackground(Color.LIGHT_GRAY);

//odrysowanie prostokąta g.drawRect(0, 0, 99, 49);

//odrysowanie ciągu znaków g.drawString(„Płótno", 20,20);

}

(26)

Klasa Panel

 Główne przyczyny

W celu grupowania komponentów

Komponenty użytkownika, które wymagają zagnieżdżenia – A custom component that requires embedded components

 Domyślnym menadżerem rozkładu jest FlowLayout

Ogranicza komponenty do ich preferowanych rozmiarów (minimalnych)

Komponenty zostają w nim umieszczone od lewej do prawej

 Tworzenie i korzystanie z panelu:

Tworzenie panelu: Panel panel = new Panel();

Dodawanie komponentów do Panelu:

panel.add(someComponent);…

(27)

Klasa Panel (2)

 Dodanie Panelu do Kontenera:

Ażeby dodać panel do zewnętrznego kontenera:

container.add(panel);

Ażeby dodać panel do istniejącego kontenera: add(panel);

Dodawanie panelu do kontenera z rozkładem BorderLayout:

container.add(panel,region);

 W klasie Panel brakuje eksplicite funkcji wymiarującej rozmiar Panelu. Rozmiar Panelu determinują

komponenty. Panel, który nie przechowuje komponentów

ma rozmiar 0.

(28)

Klasa Container

Przodek dla wszystkich rodzajów okien z wyjątkiem Canvas

Dziedziczy wszystkie metody komponentu

Użyteczne metody dla Container

add

Dodanie komponentu do kontenera.

Jeśli użyty jest BorderLayout, można określić, w którym miejscu umieścić komponent

remove

Usuwa komponent z okna (kontenera)

getComponents

Zwraca tablicę komponentów w danym oknie

Używany przez menadżera rozkładów

setLayout

Zmienia menadżera rozkładu skojarzone z danym oknem

(29)

Klasa Frame

 Główny cel

Aplikacje tzw. stand-alone z własnym paskiem menu i paskiem tytułu, obramowaniem, kursorem oraz ikoną

Może zawierać inne komponenty GUI

 Domyślny LayoutManager: BorderLayout

 Przełączenie Manager’a: setLayout(new FlowLayout());

 Tworzenie i używanie dwóch rodzajów okien:

Ze stałym rozmiarem

Dopasowujących się do tego co zawierają (metoda pack())

 Uwaga! Dziwne zachowanie ramki, w przypadku, gdy się

do niej doda komponent, po wywołaniu metody visible

(30)

Zamykana ramka

import java.awt.*;

import java.awt.event.*;

public class CloseableFrame extends Frame { public CloseableFrame(String title) {

super(title);

enableEvents(AWTEvent.WINDOW_EVENT_MASK);

}

public void processWindowEvent(WindowEvent event) { super.processWindowEvent(event); // Handle listeners if (event.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0);

} } }

Uwaga! W przypadku apletu zamiast funkcji System.exit należy użyć dispose()

(31)

Klasa Dialog

 Cele użycia

Uproszona ramka. Brak możliwości określenia kursora, ikony, paska menu, etc…

Okienko Dialog zamraża interakcję z innymi komponentami AWT do momentu jego zamknięcia

 Standardowy LayoutManager: BorderLayout

 Tworzenie i używanie:

Podobnie do ramki, jednakże konstruktor bierze dwa dodatkowe argumenty: ramkę z której jest wołany oraz wartość logiczną określającą czy jest modalny czy nie.

Dialog dialog = new Dialog(parentFrame, titleString, false);

Dialog modalDialog = new Dialog(parentFrame, titleString, true);

(32)

java.awt oraz hierarchia

dziedziczenia

(33)

Budowa interfejsu graficznego

Każdy interfejs można

zaprezentować w postaci drzewa, którego korzeniem jest Container, a liśćmi są

komponenty (przyciski, pola tekstowe, etc…)

Przykład ->

następny slajd

Typy kontenerów:

Window – najwyższa warstwa w GUI (okno).

Window nie jest podłączany do żadnego innego kontenera. Instancja obiektu Window nie ma krawędzi, ani tytułu.

Frame – najwyższa warstwa w GUI (okno), która posiada tytuł oraz krawędź. Instancja Frame może posiadać pasek menu (menubar)

Dialog – najwyższa warstwa w GUI z krawędzią i tytułem. Instancja Dialog nie może istnieć bez skojarzenia z konkretną instancją Frame.

Panel – generyczna postać kontenera, który może przechowywać komponenty. Instancja Panel

oferuje kontener, do którego mogą być dodawane komponenty.

(34)

Kontrolki GUI - AWT

Automatycznie rysowane, nie potrzeba przeładowywać metody paint.

Pozycjonowane są przez menadżera rozkładów.

Używają natywnych okienek systemowych tzw. widgets.

Adoptują look ‘n’ feel systemu, na którym są uruchamiane.

Typowo używane zdarzenia wysokopoziomowe:

Przykład: dla przycisków nie potrzeba monitorować kliknięć myszki, dodatkowo system operacyjny wyzwala przycisk w momencie uderzenia „ENTER” na klawiaturze, kiedy dany przycisk jest w fokusie.

Szczegóły obsługi zdarzeń na następnym wykładzie.

(35)

Reprezentacja GUI w postaci

drzewa komponentów

Cytaty

Powiązane dokumenty

Pojawi się zatem mechanizm polimorfizmu - czyli metoda Rysuj, w zależności od obiektu, na którymjest wykonywana,.. sporządzi inny

Jej 3 klasy potomne, natomiast, będą posiadały metodę Narysuj() (z atrybutem Overrides) rysującą, w uproszczeniu, modyfikację stopnia, czyli pręt, gwint lub dla klasy

Jeżeli klasa dziedziczy z klas, które dziedziczą po wirtualnej klasie macierzystej, wówczas konstruktor tej pierwszej klasy musi jawnie wywoływad konstruktor tej drugiej klasy.

void writeChar(int v) – zapisuje znak jako 2-bajtową wartość void writeDouble(double v) – zapisuje 8-bajtową wartość do pliku void writeFloat(float v) –

Anna Ptaszek Wartość stałej szybkości reakcji k nie zależy od stężenia reagentów ale

Definicja: Macierz diagonalnie dominująca to taka, dla której moduły elementów na diagonali są niemniejssze od sumy modułów pozostałych elementów w tym samym wierszu, tzn. |a ii |

Niech osoba dorosła natychmiast włoży zgaszoną zapałkę przez otwór do butelki i przytrzyma ją w butelce1. Palce trzymające

Estymację – szacowanie wartości parametrów lub postaci rozkładu zmiennej na podstawie próby – na podstawie wyników próby formułujemy wnioski dla całej