Post on 30-Dec-2015
description
transcript
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