Softwareová architektura Miroslav Šimek miroslav.simek@gmail.com (miroslav.simek@vscht.cz)
Náplň Úvod do sfw architektury Implementace projektu v jazyce Java 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
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 Java pro web Java pro databáze 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á proměnná objekt objekt typ typ typ
Operace nad čísly Python +-*/% Java +-*/%
Větvení Python Java if podminka: neco else: neco
Cykly Python Java for i in range(0, 10): do_something 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 Java print ”blah” print ”blah”, 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 ( ) a a
Typy II Numerické typy: Automatické přetypování Ruční přetypování 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 Java jmenná konvence: camelCase 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 Java 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