Język obiektowy o składni podobnej do C++ Zarządzanie pamięcią niepotrzebne obiekty automatycznie usuwane



Podobne dokumenty
1 Atrybuty i metody klasowe

Dokumentacja do API Javy.

Programowanie obiektowe

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wykład 7: Pakiety i Interfejsy

Kurs WWW. Paweł Rajba.

Multimedia JAVA. Historia

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w Internecie. Java

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie obiektowe zastosowanie języka Java SE

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Polimorfizm. dr Jarosław Skaruz

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Wykład 4: Klasy i Metody

Programowanie obiektowe

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Klasy abstrakcyjne i interfejsy

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Podstawy języka Java. przygotował:

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie obiektowe

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

KLASY, INTERFEJSY, ITP

Klasy abstrakcyjne, interfejsy i polimorfizm

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Pakiety i interfejsy. Tomasz Borzyszkowski

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Język Java część 2 (przykładowa aplikacja)

Wykład 8: klasy cz. 4

Podstawy otwartych języków programowania Język Java

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Aplikacje RMI Lab4

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Współbieżność w środowisku Java

Podstawy Języka Java

Interfejsy i klasy wewnętrzne

Aplikacja wielowątkowa prosty komunikator

Java: interfejsy i klasy wewnętrzne

Dziedziczenie. dr Jarosław Skaruz

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie obiektowe

Java Język programowania

Wykład 6: Dziedziczenie

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

10. Programowanie obiektowe w PHP5

Aplikacje w środowisku Java

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Wywoływanie metod zdalnych

Dziedziczenie. Tomasz Borzyszkowski

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Aplikacje RMI

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Programowanie zdarzeniowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Technologie i usługi internetowe cz. 2

Kontenery i komponenty graficzne

Podstawy programowania obiektowego w języku Java dla programujących w C++

Wykład 2: Podstawy Języka

Tworzenie i wykorzystanie usług

Podstawy programowania obiektowego

Remote Method Invocation 17 listopada 2010

Aplikacje w środowisku Java

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Operatory. Składnia. Typy proste. Znaki specjalne

Definiowanie własnych klas

Java Foundation Clases. Tworzenie graficznych interfejsów użytkownika (GUI) w Javie

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Języki i metody programowania Java Lab2 podejście obiektowe

Podejście obiektowe do budowy systemów rozproszonych

Spis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Podejście obiektowe do budowy systemów rozproszonych

Transkrypt:

1 Java Java Język obiektowy o składni podobnej do C++ Niezależny od platformy (w zasadzie) maszyna wirtualna Zarządzanie pamięcią niepotrzebne obiekty automatycznie usuwane Program jest zbiorem klas nie ma obiektów globalnych. Mechanizmy do programowania współbieżnego (wątki). Applety mini-aplikacje wykonywane np. wewnątrz przeglądarki internetowej Java vs C++ Nie ma zmiennych/funkcji globalnych zamiast nich używamy atrybutów/metod statycznych, np. public static void main(string[] args) //... Nie ma sekcji public/private oznaczamy każdą składową. Nie ma wskaźników, tylko referencje. String s = new String("Luna to surowa pani"); Wszystkie klasy dziedziczą od Object. Nie ma przeciążania operatorów (ale jest przeciążanie metod). Najprostszy program public class Hello { System.out.println("Hello!"); // out jest atr. statycznym klasy System Każdą klasę umieszczamy w osobnym pliku o nazwie NazwaKlasy.java (w tym przypadku Hello.java). 1

Kompilacja i uruchomienie programu Kompilacja programu javac Hello.java Uruchomienie java Hello Wyszukiwanie klas zmienna CLASSPATH i opcja -classpath. 2 Referencje Referencje Do wszystkich obiektów programista uzyskuje dostęp poprzez referencje. Referencja może mieć wartość null, wtedy nie wskazuje na żaden obiekt. Odwołanie do referencji pustej powoduje wygenerowanie wyjątku java.lang.nullpointerexception. Nie może istnieć referencja nie mająca wartości null i nie wskazująca na żaden obiekt. Referencja może wskazywać tylko na obiekt klasy, której jest typu, bądź jej nadklasy. Referencje Nowe obiekty tworzy się przy pomocy new. Referencji można przypisać wartość w dowolnym momencie. Wiele referencji może wskazywać na ten sam obiekt. Usunięcie obiektu może nastąpić w momencie gdy ostatnia wskazująca go referencja zostanie usunięta, bądź zostanie jej przypisana wartość null. Za zwalnianie pamięci odpowiedzialna jest maszyna wirtualna. Brak operatora delete. 2

Przykład referencje public class Hello2 { String greeting = new String("Hello"); System.out.println(greeting); greeting = null; Przykład wywoływanie metod public class Hello3 { String greeting = new String("Hello"); for (int i = 0; i < greeting.length(); i++) System.out.println(greeting.charAt(i)); // Nie możemy napisać greeting[i] // Nie ma przeciążania operatorów 3 Pakiety Pakiety W C++ organizację programu wyznaczał podział na moduły (pliki); w Javie służą do tego pakiety. Pakiety są przydatne z kilku powodów: pozwalają na grupowanie powiązanych ze sobą klas, klasy w pakiecie mogą korzystać z popularnych nazw, które inaczej mogłyby ze sobą kolidować mogą zawierać definicje klas i składowych, które są dostępne tylko wewnątrz pakietu. Używanie pakietów 3

class Date1{ java.util.date now = new java.util.date(); System.out.println(now); Używanie pakietów import java.util.date; class Date2 { Date now = new Date(); System.out.println(now); Tworzenie pakietów package geometry; class Point { double x, y; public void moveto(double x, double y) { this.x = x; this.y = y; Przy tworzeniu własnych pakietów, pakiet foo.bar.baz powinien znaleźć się w katalogu foo/bar/baz. Zmienna CLASSPATH i opcja -classpath. Nazewnictwo pakietów Jeżeli zamierzamy rozpowszechniać nasz pakiet, musimy zadbać aby jego nazwa nie kolidowała z już istniejącymi. Sugerowana konwencja łączy nazwy pakietów z domenami internetowymi: firma example.com poprzedza nazwy swoich pakietów com.example. Np. moja domena to marcin.org, więc powinienem napisać package org.marcin.geometry; class Point { //... 4

Dziedziczenie i konstruktory package mwt; import javax.swing.jframe; import java.awt.component; public class MFrame extends JFrame { public MFrame(String title) { super(title); setdefaultlookandfeeldecorated(true); setdefaultcloseoperation(jframe.exit_on_close); final void addcontent(component comp) { getcontentpane().add(comp); 4 Interfejsy Interfejsy Zamiast klas abstrakcyjnych używamy interfejsów: public interface Runny { int ANSWER = 42; void run(); public class DeepThought implements Runny { public void run() { Metody interfejsu są zawsze publiczne; nie mogą być statyczne. Pola interfejsu należy rozumieć jako stałe. Dziedziczenie interfejsów Interfejs może dziedziczyć wiele interfejsów: public interface Bar { void bar(); public interface Baz { void baz(); public interface Foo extends Bar,Baz { 5

Klasy anonimowe Czasem tworzymy klasę tylko po to, żeby przekazać jej obiekt jako parametr. W Javie możemy utworzyć taką jednorazówkę w miejscu wywołania, np. class Lola { Thread lola; lola = new Thread(new Runnable() { public void run() { System.out.println("Run Lola, run"); ); lola.start(); 5 Unicode Unicode Dzięki Unicode możemy w programach używać znaków dowolnego języka class Gżegżółka { String gżegżółka = new String("Gżegżółka"); System.out.println(gżegżółka); Wyjatki Podobnie jak w C++, ale tylko podklasy klasy Throwable public class Wyjątek extends Throwable { Metody muszą specyfikować wszystkie przekazywane wyjątki public class Wyj { public static void main(string[] args) throws Wyjątek { if(args.length < 1) throw new Wyjątek(); 6

Applety import java.applet.*; import java.awt.*; public class HelloApplet extends Applet { public void paint(graphics g) { g.drawstring("hey hey hey",20,20); g.drawstring("hello World",20,40); public void init() { // Inicjalizacja public void stop() { // Końcowe porządki Biblioteki standardowe Java posiada bogaty zestaw bibliotek standardowych. Klasy, które dziś widzieliśmy: Applet, Thread, Date,... to klasy biblioteczne Także standardowe biblioteki GUI: AWT i Swing (java.awt, javax.swing) Model GUI sterowany zdarzeniami 6 Zdarzenia Zdarzenia Zdarzenie to przeważnie jakaś akcja użytkownika (np. kliknięcie myszą) Zdarzenie jest obiektem (pod)klasy Event Każdy komponet UI może zgłosić zainteresowanie pewną kategorią zdarzeń podając słuchacza obiekt który będzie obsługiwał zdarzenia. Słuchacz musi implementować odpowiedni interface np. MouseListener. Można to osiągnąć np. rozszerzając klasy biblioteczne takie jak MouseAdapter. 7

ClickReporter import java.applet.*; import java.awt.*; public class ClickReporter extends Applet { public void init() { setbackground(color.yellow); addmouselistener(new ClickListener()); ClickListener import java.awt.event.*; public class ClickListener extends MouseAdapter { public void mousepressed(mouseevent event) { System.out.println("Mouse pressed at(" + event.getx() + "," + event.gety() + ")."); CircleListener import java.applet.applet; import java.awt.*; import java.awt.event.*; public class CircleListener extends MouseAdapter { private int radius = 25; public void mousepressed(mouseevent event) { Applet app = (Applet)event.getSource(); Graphics g = app.getgraphics(); g.setcolor(color.blue); g.filloval(event.getx()-radius, event.gety()-radius, 8

2*radius, 2*radius); Słuchacz wewnatrz klasy Tworzenie osobnej klasy dla jednej tylko metody może się nam wydawać przesadą, wolelibyśmy np. tak: public class CircleDrawer1 extends Applet,MouseListener { public void init() { setbackground(color.yellow); addmouselistener(this); public void mousepressed(mouseevent event) {... Niestety tak nie można (nie ma wielodziedziczenia). Rozwiazania Możemy zamiast tego: zaimplementować wszystkie metody MouseListener, lub zdefiniować lokalną klasę rozszerzającą MouseAdapter, lub użyć klasy anonimowej. Nazwana klasa wewnętrzna public class CircleDrawer2 extends Applet { private class CircleListener extends MouseAdapter { private int radius = 25; public void mousepressed(mouseevent event) { Graphics g = getgraphics(); g.setcolor(color.blue); g.filloval(event.getx()-radius, event.gety()-radius, 2*radius, 2*radius); 9

public void init() { setbackground(color.yellow); addmouselistener(new CircleListener()); Anonimowa klasa wewnętrzna public class CircleDrawer3 extends Applet { public void init() { setbackground(color.yellow); addmouselistener(new MouseAdapter() { private int radius = 25; public void mousepressed(mouseevent event) { Graphics g = getgraphics(); g.setcolor(color.blue); g.filloval(event.getx()-radius, event.gety()-radius, 2*radius, 2*radius); ); Zaleta: zwięzłość; wada: słaba czytelność 10