220 likes | 375 Views
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ář
E N D
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ář • 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 na http://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++ PHP Java .net Perl Python Ruby/Rails
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
Java int a = 10; float b = 1.23; String s = ”hello world”; boolean c = true; a = b; ?? Statická typová kontrola • Python • a = 10 • b = 1.23 • s = ”hello world” • c = True • a = b proměnná proměnná objekt objekt typ typ typ
Java +-*/% Operace nad čísly • Python • +-*/%
Java if (podminka) { neco} else { neco} Větvení • Python • if podminka: necoelse: neco
Java for (int i = 0; i < 10; i++) { do_something;} Cykly • Python • for i in range(0, 10): do_something • while (i<10) { do_something;} • break; continue; • while i<10: do_something • break continue
Java System.out.println (”blah”); System.out.print (”blah”); Tisk na stdout • Python • print ”blah” • 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 ( ) a a
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;
Java int function(int a, int b) { return a+b;} jmenná konvence: camelCase Deklarace funkcí • Python • def function(a, b): return a+b
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
Java int[] a = { 1, 2, 3 }; a[1] = 4; int[] b = new int[10]; b.length for (int i : a) { System.out.println (i);} 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
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