Transcript Document

Java un OOP pamati
Ievads
• Nepieciešamas priekšzināšanas
•
•
Java Standard Edition
Objektorientēta programmēšana
• Pārskata lekcijas par programmēšanas valodu Java
•
http://www.webkursi.lv/java-eim/de/index_java.html
Javas tehnoloģija
• Javas tehnoloģijā ietilpst:
•
Javas programmēšanas valoda
•
Javas standarta API un citas bibliotēkas
•
Izstrādes vide un rīki, piemērām:
•
•
•
•
•
kompilēšanas rīks javac
CLASS koda interpretātors java
dokumentācijas ģenerēšanas rīks javadoc
klašu failu arhivēšanas rīks jar
Aplikāciju darbināšanas vide
• Java Runtime Environment
Javas vides uzstādīšana
• Ielādēt Java Developer Kit (JDK) no Interneta
• Uzinstalēt to, piemērām, direktorijā
c:\Program Files\Java\jdk1.6.0
• Izpildāmas programmas atrodas apakšdirektorijā
•
•
\bin\java.exe
\bin\javac.exe
• Lai ar Javu strādāt no patvaļīgas direktorijas
•
•
definēt sistēmas vides mainīgo JAVA_HOME ar
vērtību c:\Program Files\Java\jdk1.6.0
pievienot PATH sistēmas mainīgajam direktoriju
%JAVA_HOME%\bin
Vienkārša Javas programma
package sample1;
ClockMain.java
public class ClockMain {
public static void main(String[] args) {
MyClock myClock = new MyClock();
System.out.println(myClock.getMessage());
}
}
package sample1;
import java.util.Date;
MyClock.java
Kompilēšana un
palaišana:
public class MyClock {
public String getMessage() {
Date d = new Date();
return "Pareizs laiks: " + d;
}
}
javac ClockMain.java
java ClockMain
Kompilācija un izpilde
Javas Virtuālā Mašīna (JVM)
• The Java Virtual Machine is an abstract
computing machine
• The JVM is the component of the technology
responsible for
•
•
•
its hardware- and operating system- independence
the small size of its compiled code
ability to protect users from malicious programs
• The JVM knows nothing of the Java
programming language, only of a particular
binary platform-independent .class format
Klašu ielādētājs (classloader)
• The Java Classloader is a part of the JRE that
dynamically loads Java classes into the JVM
• Class files are not loaded into memory all at once, but
rather are loaded on-demand, as needed by the program
JAR faili
• JAR = Java Archive
• Šīs formāts atļauj apvienot vairākas klases vienā
arhīvā (līdzīgi ZIP formātam)
• Parasti JAR faili satur klašu failus un papildus
resursus
• JAR faila izveidošana
jar cf jar-file input-file(s)
Classpath
• Classpath is arguments, kurš saka Javas Virtuālai
Mašīnas kur meklēt pakotnes un klases
• Claspath var uzstādīt:
•
No komandu rindas
java -classpath
D:\myprogram;D:\myprogram\lib\supportLib.jar
org.mypackage.HelloWorld
•
Kā sistēmas vides mainigo
set CLASSPATH=D:\myprogram;D:\myprogram\lib\supportLib.jar
java org.mypackage.HelloWorld
Objektorientētā programmēšana
• Klase (class)
• Objekts (object)
• Interfeiss (interface)
• Abstrakcija (abstraction)
• Iekapsulēšana (encapsulation)
• Mantošana (inheritance)
• Polimorfisms (polymorphism)
Interfeiss
• Interfeiss ir kontrakts starp klasi un ārējo pasauli
• Kad klase implementē interfeisu, tā apsola
nodrošināt uzvedību, ko pasludina interfeiss
• Daudzas klases var implementēt vienu un to pašu
interfeisu
• Klase var implementēt vairākus interfeisus
Interfeisa piemērs
public interface Flyer {
public void takeOff();
public void land();
public void fly();
}
public class Airplane implements Flyer {
public void takeOff() {
// accelerate until lift-off
// raise landing gear
}
public void land() {
// lower landing gear
// deccelerate and lower flaps until touch-down
// apply breaks
}
public void fly() {
// keep those engines running
}
}
Sadalīšana sastāvdaļās (decomposition)
Priekšrocības, ja programmu dala mazākās daļās:
•
Darba dalīšana: var paātrināt izstrādi, sadalot
cilvēkiem
•
Atkalizmantošana: dažus gabalus, kuri ir kopīgi
vairākām programmām var izgatavot vienreiz un lietot
daudzkur
•
Modulāra analīze: katru daļu var atsevišķi pārbaudīt
•
Izmaiņu lokalizējamība: izmaiņa parasti skar tikai
dažas no daļām
Iekapsulēšana (encapsulation)
• Encapsulation is the concept that an object
should totally separate its interface from its
implementation. All the data and implementation
code for an object should be entirely hidden
behind its interface.
• The term encapsulation is often used
interchangeably with data hiding
• Klases metodes ir public, atribūti ir private
Iekapsulēšana (piemērs 1-3)
• Sliktā, neobjektorientētā veidā
projektēta, Javas klase:
• Klienta programmai ir tieša pieeja šīs klases
iekšējiem datiem:
MyDate d = new MyDate();
d.day = 32; // neesošs datums
d.month = 2; d.day = 29; // grūtāk noskaidrot datuma esamību
d.day = d.day + 1; // nepārbauda mēneša beigas
Iekapsulēšana (piemērs 2-3)
• Uzlabots risinājums:
• Klienta programmai jālieto
setXxx()/getXxx() metodes,
lai piekļūtu iekšējiem datiem:
MyDate d = new MyDate();
d.setDay(32); // nederīga diena, atgriež "false"
d.setMonth(2);
d.setDay(30); // intervāliem atbilst, bet aplami,
// setDay atriž vērtību "false"
d.setDay(d.getDay() + 1); // atgriež "false", ja ir mēneša beigas
Iekapsulēšana (piemērs 3-3)
• Lietojot iekapsulēšanu, klases MyDate iekšējo
uzbūvi var mainīt (vienu privāto atribūtu vietā
ieviešot citus utml.), bet ja nebūs izmainījusies
publisko metožu uzvedība, šīs izmaiņas klases
lietotāji nepamanīs.
Iekapsulēšana (kopsavilkums )
• Klases projektējums ar iekapsulēšanu:
• noslēpj klases implementācijas detaļas
• lietotājs spiests lietot interfeisu, lai piekļūtu
datiem
• padara kodu vieglāk uzturamu
Mantošana
•
Object-oriented programming allows classes to inherit
commonly used state and behavior from other classes.
class MountainBike extends Bicycle {
// new fields and methods
// defining a mountain bike would go here
}
•
Javas valodā:
•
•
katrai klasei var būt tikai
viena super-klase
katrai super-klasei potenciāli
var eksistēt bezgalīgi daudz apakš-klases
http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html
Javas platformas klašu hierarhija
• Klase java.lang.Object definē un
implementē funkcijas un uzvedību, kas ir kopīga
visām klasēm - ieskaitot Jūsu klases
java.lang.Object atrodas klašu hierarhijas augšā
http://java.sun.com/docs/books/tutorial/java/IandI/subclasses.html
java.lang.Object metodes
Kādas Jūs varat nosaukt
java.lang.Object klases metodes?
•
•
•
•
•
clone()
• notify()
equals(Object obj) • notifyAll()
finalize()
• toString()
getClass()
• wait()
hashCode()
Polimorfisms
• Polymorphism is the capability of an action or
method to do different things based on the object
that it is acting upon.
public class AnimalReference{
public static void main(String args[]){
Animal ref;
// set up var for an Animal
Cow aCow = new Cow("Bossy"); // make specific objects
Dog aDog = new Dog("Rover");
Snake aSnake = new Snake("Earnie");
// now reference each as an Animal
ref = aCow;
ref.speak();
ref = aDog;
ref.speak();
ref = aSnake; ref.speak();
}}
Ietvari/karkasi (frameworks) un API
No Wikipedia:
•
•
A software framework is a re-usable design for a software
system (or subsystem).
Various parts of the framework may be exposed through
an API.
Citiem vārdiem:
•
•
Ietvari/karkasi ir lielas objektu grupas, kas nodrošina
sarežģītu mijiedarbību.
Funkcionalitātei var piekļūt izmantojot API.
Open-Closed princips
•
Ietvarus var lietot oriģinālajā veidā un var arī
paplašināt, lai paplašinātu tajos iebūvēto uzvedību ar
jaunām iezīmēm.
•
Open-Closed princips apgalvo, ka pielāgojumu
klasēs, kuras manto no ietvara klasēm, nedrīkst
mainīt ietvara klases uzvedību; to drīkst vienīgi
paplašināt.
•
“Software entities like classes, modules and
functions should be open for extension, but closed
for modification.” Bertrand Meyer (1988)
Ietvaru piemēri
• Spring Framework
•
The leading full-stack Java/JEE application
framework
• JUnit
•
A unit testing framework for the Java
• jBPM
•
Workflow management system based on J2EE
• Jena
•
A Semantic Web framework for Java
Kas vēl svarīgs ir Javas valodā?
• Kolekcijas (collections)
• Izņēmumi (exceptions)
• Ievade/Izvade (input/output)
• Pavedieni (threads)
Java 5.0 (Tiger)
• Generics
List<String> values = new ArrayList<String>();
public void save(List<? extends PersistentEntity>);
• for loops
List<String> values = getValues();
for (String s: values){
...
}
• Annotations (Metadata)
Java 6.0 (Mustang)
• Web Services
•
•
•
First-class support for writing XML web service
client applications
Java SE 6 adds new parsing and XML to Java objectmapping APIs, previously only available in Java EE
What's New in Java SE 6 (Top 10)
http://java.sun.com/developer/technicalArticles/J2SE/Deskt
op/javase6/beta2.html
Bibliogrāfija
•
The Source for Java Developers
http://java.sun.com/
•
Pārskats par Javu
http://www.webkursi.lv/java-eim/de/index_java.html