Softwareová architektura

Preview:

DESCRIPTION

Miroslav Šimek miroslav.simek@gmail.com ( miroslav.simek@vscht.cz ) ‏. Softwareová architektura. Náplň. Úvod do sfw architektury modely vývoje software návrhové vzory Implementace projektu v jazyce Java. Formální. Formálně 2 přednáška + 3 cvičení, ve skutečnosti 5 (hands-on) seminář - PowerPoint PPT Presentation

Citation preview

Softwareová architektura

Miroslav Šimek

miroslav.simek@gmail.com

(miroslav.simek@vscht.cz)

Náplň

Úvod do sfw architektury modely vývoje software návrhové vzory

Implementace projektu v jazyce Java

Formální ...

Formálně 2 přednáška + 3 cvičení, ve skutečnosti 5 (hands-on) seminář

V průběhu budeme vyvíjet Java aplikaci – každý člověk sám za sebe

Aplikace je jedinou podmínkou pro získání kreditů

Cvičení na sebe navazují, každá absence snižuje pravděpodobnost dokončení aplikace !

Aplikace

Web Shop requirements mockup analýza design implementace v jazyce Java

UI vrstva Objektový model (business logic) Databázová vrstva

Doporučená literatura

Bruce Eckel: Thinking in Java http://www.codeguru.com/java/tij

en.wikipedia.org design patterns uml ...

Javadoc http://java.sun.com/javase/6/docs/api/

slides, software atp. jsou k dispozici nahttp://ich.vscht.cz/dokuwiki/softwareova_architektura_zima_2008

Proč Java

Oblíbenost Java .net Rails Django PHP

Akceptovanost Java .net PHP

Umístění v hierarchii jazyků

mikroinstrukce

strojový kód

assembler

C

C++

Java .net

Python Ruby/Rails

PHP

Perl

Java v praxi

70% připadá na webové aplikace 10% mobilní aplikace 20% ostatní (konektory systémů, ...)

Náplň Java části

Jazyk Java Typový systém Javy Kolekce Rozšiřování typů

Java pro web JSP, JSF

Java pro databáze Hibernate

Pokročilé věci Další knihovny, vlákna, ...

Rozdíly Java vs. Python

Statická vs. dynamická typová kontrola Kompaktnost Knihovny Rychlost vykonávání programu

Statická typová kontrola

Python a = 10 b = 1.23 s = ”hello world” c = True a = b

Java int a = 10; float b = 1.23; String s = ”hello world”; boolean c = true; a = b; ??

proměnná

objekt

typ

proměnná

objekt

typ

typ

Operace nad čísly

Python +-*/%

Java +-*/%

Větvení

Python if podminka:

necoelse:

neco

Java if (podminka) {

neco} else { neco}

Cykly

Python for i in range(0, 10):

do_something

Java for (int i = 0;

i < 10; i++) { do_something;}

while i<10:do_something

break continue

while (i<10) {do_something;

}

break; continue;

Tisk na stdout

Python print ”blah”

print ”blah”,

Java System.out.println

(”blah”);

System.out.print

(”blah”);

Příklady v BeanShellu

Faktoriál čísel 1...10 f(n)=1 . 2 . ... . n

prvních 20 Fibonacciho čísel f(n) = f(n) + f(n-1), f(0) = f(1) = 1

pro a=1..5 (power tower)a aa( )

Typy II

Numerické typy: byte, short, int, long, float, double

Automatické přetypování byte → short → int → long → float → double

Ruční přetypování int a = (int) 2.5;

Deklarace funkcí

Python def function(a, b):

return a+b

Java int function(int a, int b)

{return a+b;

}

jmenná konvence: camelCase

Příklady v BeanShellu

Pro předchozí příklady zaveďte funkce, které vrátí:

factorial(n) fibonacci(n) powerTower(n)

pascalův trojúhelník funkce pascalNumber(n, k) program, který vytiskne prvních 20 řádek program, která vytiskne prvních 20 řádek modulo 2

Pole

Python a = [1, 2, 3] a[1] = 4 b = [0 for i in range(0, 10)] len(b)

for i in a:print i

Java int[] a = { 1, 2, 3 }; a[1] = 4; int[] b = new int[10]; b.length

for (int i : a) {System.out.println

(i);}

Příklady v BeanShellu

Vytvořte funkci dice1(), která vrací náhodné číslo od 1-6 s uniformním rozdělením. Pro vygenerování náhodného čísla použijte funkci Math.random(), která vrací náhodné číslo v intervalu [0, 1)

Napište funkci diceN(n), která vrátí pole n hodů Napište následující statistické funkce:

minItem(arr), maxItem(arr) mean(arr) – vrací aritmetický průměr prvků pole distribution(arr) – vrací pole 6-ti prvků obsahující

procentuální zastoupení čísel 1..6