objektinis programavimas java - klevas.mif.vu.ltrvck/op2/paskait/0/op2java.pdf · thinking in...

26
Objektinis programavimas II (JAVA) Rimantas Vaicekauskas, 2013 m.

Upload: nguyenkhanh

Post on 05-Sep-2018

299 views

Category:

Documents


7 download

TRANSCRIPT

Objektinis programavimas II

(JAVA)

Rimantas Vaicekauskas,

2013 m.

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

Java platforma

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

Įvado pabaiga