objektinis programavimas java - klevas.mif.vu.ltrvck/op2/paskait/0/op2java.pdf · thinking in...
TRANSCRIPT
Objektinis programavimas JAVA
• Svetainė: http://mif.vu.lt/~rvck/op2/
• POBP2214, Programų sistemos, 3 sem., 3 kr.,
32+32 val., egzaminas
• Egzamino balas formuojamas taip: 6 (egzamino
testas raštu) + 4 (lab. darbų įvertis)
• Atsiskaitymo/lankomumo reikalavimai: suminis
semestro lab. darbų įvertinimas ne mažesnis
negu 50% (2 balai)
• Aktyvus dalyvavimas paskaitose premijuojamas
Kurso paskirtis
• Įsisavinti objektiškai orientuoto
programavimo principus programavimo
kalbos JAVA pagrindu.
• Susipažinti su objektiškai orientuota
analize ir projektavimu, išreiškiant
projektinius sprendimus UML žymėjimais.
• Žinoti ir sugebėti taikyti pagrindinius
projektavimo šablonus (design patterns)
Literatūros nuorodos
• Bruce Eckel. Thinking in Java, 3rd/4th Edition,
2003 (t.p. online)
• H.M.Deitel, P.J.Deitel. Java: how to program 4th
edition. Prentice Hall, 2003 (7-th ed. 2007) • C.Horstmann. Computing concepts with Java Essentials 3 rd edition,
John Willey, 2003.
• L.Lemay, R.Cadenhead. Sams teach yourself Java 1.2 in 21 days,
1998 Sams Publishing
• P.Naughton. The Java handbook. 1996, McGraw-Hill.
• D.Flanagan. Java in a Nutshell, Second edition, 1997.
• R.Belevičius. Java technologijos. Mokomoji knyga.
Technika. 2005
Išplėstiniams skaitymams
• Grady Booch. Object-Oriented analysis and Design with
applications. Second edition.
• Bruce Eckel. Thinking in Patterns with Java (online)
• Craig Larman. Applying UML and Patterns: An
Introduction to Object-Oriented Analysis and Design and
the Unified Process (2nd Edition). Prentice Hall.
• Bernd Bruegge, Allen H. Dutoit. Object-Oriented
Software Engineering: Using UML, Patterns and Java,
Second Edition
Java Online šaltiniai
• http://java.sun.com/
• http://java.sun.com/docs/
• http://java.sun.com/docs/books/tutorial/
• Java language specification:
http://java.sun.com/docs/books/jls/
• MIF kolegų A. Basčio bei V.Stakėno Java
progr. kalbos kursų medžiaga.
Kodėl OP
• Programinė įranga sudėtinga
• Tam, kad supaprastintį visumą –
reikalingas skaidymas į dalis
• Procedūrinio programavimo paradigma –
skaidyti programą į procedūras.
• Trūkumas – d u o m e n y s ?!
• Objektiškai orientuoto program. idėja –
apjungti procedūras su duomenimis.
Pagrindinės objektinio
programavimo (OOP) sąvokos
• Objektas – vienareikšmiškai identifikuojamas,
savistovis programinis darinys, turintis būseną ir
elgesį.
• Pranešimas - komunikacijos(bendravimo) tarp
objektų būdas (kitaip vad.- metodu).
• Klasė - prototipas, apibrėžiantis tam tikros
rūšies objektų ypatybes. Kiekvienas konkretus
objektas yra kurios nors klasės egzempliorius
(instance).
OOP sąvokos (2)
• Inkapsuliacija (encapsulation) - objekto elgesio ir
būsenos kaip visumos traktavimas. Susijęs su objekto
realizacijos paslėpimu, leidžiant manipuliuoti objektu tik
naudojant viešąją sąsają (interface).
• Klasių hierarchija, paveldėjimas- klasių sistemos
organizavimo būdas, specializuojant elgesį išvestinėse
klasėse. Įgalina programinių sistemų pakartotinį
panaudojamumą.
• Polimorfizmas – objektų sugebėjimas reaguoti į metodo
iškvietimą priklausomai nuo objekto klasės.
Realizuojamas virtualiųjų metodų kvietiniais.
OOP sąvokos (3)
• OOP: tai programavimo metodologija,
– kai programa sukomponuojama iš objektų,
– kiekvienas objektas priklauso tam tikrai klasei,
– klasės sudaro paveldėjimo hierarchiją (Pagal Booch).
• OOP susijęs taip pat su OO analize ir projektavimu.
• OO programavimas realizuojamas naudojant OO
principus įgyvendinčiąja programavimo kalba. Iš esmės
daugelis šiuolaikinių programavimo kalbų leidžia OO
išplėtinius.
Programavimo kalbos
• Pirmosios: Fortran, Algol, Cobol,Lisp,PL/1
Pascal – 1954 –1970
• Objektinės (duomenu abstrakcija + klasės),
objektiškai-orientuotos( paveldėjimas ir
polimorfizmas).
– Simula (1960), Simula 67 - Algol'o idejos +
paveldėjimas + inkapsuliacija.
– Smalltalk (1972) - pilnai OO kalba (netgi skaičiai -
objektai) kartu su programavimo aplinka.
– Ada (1978)
Kalbos (2)
• C++ (1983) Kilo iš "C" [Kernighan, 1978] Bendro
pobūdžio progr. kalba. Pasirodė (pavadinta)
1983. Bendro pobūdžio progr. kalba.
– Geresnė negu C.
– Įgalina duomenų abstrakciją.
– Įgalina OO programavimą.
– Įgalina apibendrintą programavimą (templates).
– Įgalina ypatingų situacijų mechanizmo (exception)
panaudojimą.
– Standartizuota 1998 m., ANSI/ISO 14882.
Kalbos (3)
• Object Pascal (1986),
• Java (1995),
• C# ("C sharp."), Microsoft, 2000
• Skriptinės kalbos: Python, Perl, Ruby, …
Java programavimo kalba
• objektiškai orientuota, bet paprastesnė nei C++
• interpretuojama,
• architektektūriškai neutrali,
• dinaminė,
• saugi,
• daugiagijė,
• turinti turtingą klasių biblioteka
• turinti išvystytus IDE (Eclipse, NetBeans).
• java kalba patyrė pokyčių, ypač 1.5 versijoje
Paprasčiausia programa /**
Hello console
@author anonymous
*/
public class HelloConsole {
/** Main function.
@param args - command line arguments
@return Nothing
*/
public static void main(String[] args) {
// System - class name (java.lang.System)
// out statical field being java.io.PrintStream
System.out.println("Hello, world");
}
}
Programos vykdymo etapai
• Kompiliavimas komandinės eilutės aplinkoje (sukuriamas HelloWorld.class
failas) :
javac HelloWorld.java
• Vykdymas komandinės eilutės aplinkoje:
java HelloWorld
OOP anomalijos
// Normalus kodas
print(a + b)
// "Išpūstas kodas"
am = new math.ArithmeticManager()
opA = new math.Operand((float) a)
opB = new math.Operand((float) b)
am.addOperand(opA)
am.addOperand(opB)
am.operator = new math.operators.Addition()
am.executeMathOperation()
system.io.output.print(am.mathOperationResult())
Pagal: http://reocities.com/tablizer/oopbad.htm
Progr. kalbų ateitis (1)
namespace MyNamespace
{
public class MyClass
{
public static void Main()
{
Console.WriteLine("Hello, C#");
}
}
}
C# programa:
Pagal: http://www.charlespetzold.com/etc/CSAML.html
Progr. kalbų ateitis (2)
<CsamlFile xmlns="http://schemas.microsoft.com/winfx/2006/xaml/csaml"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<NamespaceDeclaration Identifier="MyNamespace">
<ClassDeclaration Identifier="MyClass"
Access="Public">
<MethodDeclaration Identifier="Main"
Access="Public"
Modifier="Static"
ReturnType="{x:Type void}">
<InvocationExpression
MemberAccess="System.Console.WriteLine">
<InvocationExpression.ArgumentList>
<Literal Type="{x:Type string}"
Value="Hello, CSAML! ">
</InvocationExpression.ArgumentList>
</InvocationExpression>
</MethodDeclaration>
</ClassDeclaration>
</NamespaceDeclaration>
</CsamlFile>
C# Application Markup Language or CSAML
Pagal: http://www.charlespetzold.com/etc/CSAML.html