28
Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva Zavod za elektroniku, mikroelektroniku računalne i inteligentne sustave 1/28

Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Oblikovni obrasci u programiranjuUvodno predavanje

Siniša Šegvić

Sveučilište u ZagrebuFakultet elektrotehnike i računarstvaZavod za elektroniku, mikroelektronikuračunalne i inteligentne sustave

→ 1/28

Page 2: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Sadržaj uvodnog predavanja□ Motivacija za načela i obrasce programskog oblikovanja:

□ problemi vezani uz složenost interakcije među komponentama□ obuzdavanje složenosti apstrakcijom i organizacijom

□ Oblikovne osnove za ublažavanje interakcijskih problema:□ ne-funkcionalni zahtjevi: ne odnose se na funkcionalnost sustava□ utjecaj tih zahtjeva na dinamiku razvoja

□ Značaj oblikovanja u razvojnim procesima:□ kako i kada planirati organizaciju programa?□ usporedba "lakih" i "teških" razvojnih modela (metodologija)

□ O predmetu:□ glavne teme, pretpostavljeno znanje□ način održavanja nastave, razdioba bodova, literatura

Uvodno predavanje → Sadržaj uvodnog predavanja 2/28

Page 3: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: problemiZašto je programsko inženjerstvo teško?

□ Problemi vezani uz funkcionalnost programa:□ sofisticirana funkcionalnost□ postizanje adekvatne brzine izvođenja□ ostvarivanje lakog, intuitivnog i ugodnog korištenja

□ Problemi vezani uz poslovno okruženje:□ ograničeni vremenski i materijalni resursi□ neprecizni i promjenljivi funkcionalni zahtjevi

□ Problemi vezani uz organizaciju:□ složenost interakcije među komponentama programa□ otežavaju zadovoljavanje svih ostalih zahtjeva

Zašto je teško organizirati interakciju komponenata?□ strahovito puno načina za organiziranje sustava (eksp. složenost!)□ prikladnost organizacije vidljiva tek pri implementaciji (kasno!)

Organiziranje interakcije: ključni zadatak programskog oblikovanja!Uvodno predavanje → Motivacija 3/28

Page 4: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: složenost [brooks95]Složenost interakcije je nezaobilazna poteškoća razvoja programa:

□ implementirati jedan program s 30 funkcionalnosti puno teže nego30 programa s po jednom funkcionalnošću(funkcionalnosti međudjeluju, najčešće negativno)

□ ne postoji tehnologija koja ćepovećati produktivnostprogramskog inženjerstva za redveličine u sljedećih 10 godina(no silver bullet)

□ ako projektu koji kasni dodijelimonove inženjere --- kašnjenje će sepovećati (mythical man-month)

□ jedan pristup bio bi izdvojiti funkcionalnosti u zasebne programe ipovezati ih skriptnim jezikom (ali to ne možemo uvijek!)

□ tema kolegija: pristupi za smanjivanje međuovisnostikomponenata te ublažavanje njenih štetnih efekata

Uvodno predavanje → Motivacija 4/28

Page 5: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: primjer 1Složenost je svud oko nas; evo kakvim grafom poziva funkcijabiblioteke rezultira dohvat jedne jedine stranice preko http protokola:

□ primjer dodatka: uvođenje nove metode autentikacije

http://mattiasgeniar.be/2008/11/09/system-calls-in-apache-linux-vs-iis-windows/

Uvodno predavanje → Motivacija (2) 5/28

Page 6: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: primjer 2aZašto je složenost programskog sustava problematična?

subversion/libsvn_fs_base/err[2:1]

subversion/libsvn_fs_base/id[2:1]

.[32]

subversion/libsvn_fs_fs/dag[2:1]

subversion/libsvn_fs_fs/fs_fs[2:1]

.[18]

subversion/libsvn_fs_base/bdb/reps-table[2:1]

subversion/libsvn_fs_base/bdb/bdb-err[2:1]

.[39]

subversion/libsvn_fs_base/fs[2:1]

.[306]

subversion/libsvn_fs_base/lock[2:1]

subversion/libsvn_fs_base/bdb/lock-tokens-table[2:1]

.[163]

subversion/libsvn_fs/fs-loader[2:1]

subversion/libsvn_fs_base/reps-strings[2:1]

.[32]

subversion/libsvn_fs_fs/tree[2:1] .[13]

subversion/libsvn_fs_base/bdb/node-origins-table[2:1]

.[8]

subversion/libsvn_fs_base/uuid[2:1]

subversion/libsvn_fs_base/bdb/uuids-table[2:1].[17]

subversion/libsvn_fs_base/dag[2:1] subversion/libsvn_fs_base/node-rev

[2:1]

.[29]

subversion/libsvn_fs_base/tree[2:1]

.[159]

subversion/libsvn_fs_base/bdb/strings-table[2:1] .[8]

subversion/libsvn_fs_fs/fs[2:1]

subversion/libsvn_fs_fs/lock[2:1]

.[18]

subversion/libsvn_fs_base/util/fs_skels[2:1]

.[3]

subversion/libsvn_fs_base/bdb/rev-table[2:1]

.[9]

subversion/libsvn_fs_fs/err[2:1]

subversion/libsvn_fs_fs/id[2:1]

.[10]

subversion/libsvn_fs_base/bdb/dbt[2:1]

subversion/libsvn_fs_base/util/skel[2:1]

.[16]

.[1]

subversion/libsvn_fs_base/bdb/env[2:1]

.[2]

subversion/libsvn_fs_fs/key-gen[2:1]

subversion/libsvn_fs_base/bdb/changes-table[2:1]

.[11]

subversion/libsvn_fs_base/bdb/nodes-table[2:1]

.[11]

.[13]

.[4]

.[2]

subversion/libsvn_fs_base/revs-txns[2:1]

.[292]

.[7]

subversion/libsvn_fs_base/trail[2:1]

.[15]

.[22]

subversion/libsvn_fs_base/bdb/copies-table[2:1]

.[14]

.[28]

.[3]

.[4]

subversion/libsvn_fs_base/key-gen[2:1]

.[9]

.[19]

subversion/libsvn_fs_base/bdb/locks-table[2:1] .[177]

subversion/libsvn_fs_util/fs-util

.[1]

.[8]

.[16]

.[13]

.[3]

.[170]

.[23]

subversion/libsvn_fs_base/bdb/bdb_compat[2:1]

.[16]

.[146]

.[5]

.[5]

.[7]

subversion/libsvn_fs_base/bdb/txn-table[2:1]

.[122]

subversion/libsvn_fs/access

.[1]

.[51]

.[9]

.[26]

.[28]

.[14]

(graf ovisnosti komponenata jednog paketa biblioteke libsvn)

Uvodno predavanje → Motivacija (3) 6/28

Page 7: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: primjer 2bZato što iza jedne stanovite granice složenosti struktura programapostaje neprozirna...

cvsh_src/grid/draw/grid_draw_colours[2:1]

cvsh_src/img/io/img_io_load_pxm

cvsh_src/img/img_util[2:1]

.[3]

cvsh_src/img/io/img_io_load[2:1]

.[2]

cvsh_src/img/access/img_access_pix

cvsh_src/ui/ui_report[2:1]

cvsh_src/ui/ui_reportAbstract

.[1]

cvsh_src/alg/alg_base[2:1]

.[5]

cvsh_src/math/tnt/math_tnt[2:1]

cvsh_src/ext/noise/ipp_attenuate[2:1]

cvsh_src/ipp/ipp_loop

.[3]

.[1]

cvsh_src/img/access/img_access_dispatch

.[2]

cvsh_src/img/access/img_access_comb

.[1]

cvsh_src/img/img_dbg[2:1]

.[2]

cvsh_src/ext/rs232/unix/rs232_unix_low[2:1]

cvsh_src/lib/grab/vs_grab_w32MCI[2:1]

.[2]

cvsh_src/vs/vs_grab[2:1]

.[2]

cvsh_src/util/util_bmp[2:1]

.[1]

cvsh_src/ipp/ipp_histogram[2:1]

.[5]

cvsh_src/util/util_cxx[2:1]

.[1]

.[2]

.[1]

cvsh_src/win/root/win_wrap[2:1]

cvsh_src/win/root/win_base[2:1]

.[7]

cvsh_src/lib/avi/vs_file_wmv_w32

cvsh_src/lib/avi/vs_file_wmv

.[1]

cvsh_src/util/util_registry[2:1]

.[1]

.[2]

cvsh_src/ext/klt/old/klt/example3

cvsh_src/ext/klt/old/klt/klt[2:1]

.[2]

cvsh_src/avf/avf_workerDllAdapter

cvsh_src/avf/avf_worker[2:1]

.[2]

cvsh_src/util/util_string[2:1]

.[1]

cvsh_src/ext/libvs/ext_libvs_interface_jni[2:1]

cvsh_src/ext/libvs/ext_libvs_interface[2:1]

.[1]

cvsh_src/ext/lines/ipp_wpht[2:1]

cvsh_src/grid/root/grid_primitives[2:1]

.[1]

cvsh_src/img/access/img_access_wrap

.[1]

.[2]

cvsh_src/img/access/img_access_guard

.[1]

cvsh_src/ext/canny/ext_canny[2:1]

cvsh_src/ipp/ipp_mask[2:1]

.[1]

cvsh_src/ipp/ipp_addMask[2:1]

.[1]

cvsh_src/ipp/ipp_vector[2:1]

.[1]

cvsh_src/img/access/img_access_copy[2:1]

.[3]

cvsh_src/ipp/ipp_binarize[2:1]

.[1]

cvsh_src/ext/canny/ipp_histeresis[2:1]

.[2]

cvsh_src/ext/canny/ipp_nms[2:1]

.[2]

cvsh_src/ext/canny/ipp_convolve_gauss[2:1]

.[1]

cvsh_src/ipp/ipp_values[2:1]

.[3]

cvsh_src/ext/canny/ipp_gradient[2:1]

.[1]

cvsh_src/ext/sift/alg_sift

cvsh_src/util/util_time

.[1]

.[1]

.[1]

.[1]

cvsh_src/ext/sift/ext_sift_keypoint_util[2:1]

.[2]

cvsh_src/math/la/math_la2D[2:1]

.[1]

cvsh_src/alg/alg_types[2:1]

.[2]

.[2]

cvsh_src/win/event/win_event_abstract

.[1]

cvsh_src/ext/sift/ext_sift_base[2:1]

.[1]

cvsh_src/vs/vs_file_srs[2:1]

cvsh_src/vs/vs_file[2:1]

.[1]

cvsh_src/img/io/img_io_load_ras[2:1]

.[3]

cvsh_src/ext/klt/old/klt/error

cvsh_src/ext/harris/ipp_grad2ndMoment[2:1]

.[1]

.[2]

.[1]

.[2]

.[1]

cvsh_src/ext/zhang/avf_workerZhangTest

.[2]

cvsh_src/win/ann/win_ann[2:1]

.[1]

cvsh_src/ext/zhang/ipp_matchGrid[2:1]

.[2]

cvsh_src/ext/zhang/ext_zhang[2:1]

.[3]

.[2]

cvsh_src/win/event/win_event[2:1]

.[1]

cvsh_src/vs/vs_base[2:1]

.[1]

cvsh_src/lib/grab/vs_grab_macx1394_test

cvsh_src/lib/grab/vs_grab_macx1394[2:1]

.[3]

cvsh_src/ext/rs232/rs232[2:1]

cvsh_src/ccam/visca/ccam_visca_directMgr[2:1]

cvsh_src/ccam/visca/ccam_visca_direct[2:1]

.[1]

cvsh_src/ext/noise/ipp_noiseReplaceUniformMasked[2:1]

.[4]

.[1]

.[2]

.[1]

cvsh_src/ext/libvs/karla/hr_fer_zemris_mastif_LibVSInterface[2:1]

cvsh_src/grid/draw/grid_draw[2:1]

.[1]

cvsh_src/win/ann/win_ann_abstract

.[2]

cvsh_src/ext/harris/ipp_findPoints[2:1] .[4]

.[2]

.[2]

.[2]

cvsh_src/lib/grab/vs_grab_linux1394[2:1]

cvsh_src/util/util_debug[2:1]

.[1]

.[4]

.[3]

cvsh_src/avf/avf_workerPointCam[2:1] .[2]

.[1]

.[2]

.[1]

cvsh_src/ccam/pt/ccam_pt[2:1]

.[1]

.[1]

.[1]

cvsh_src/ipp/ipp_range[2:1]

.[8]

.[2]

.[3]

.[3]

cvsh_src/cli/cli_dev[2:1]

cvsh_src/ipp/ipp_projection[2:1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/vd/vd_base[2:1]

cvsh_src/img/img_wrap[2:1]

.[4]

cvsh_src/ext/klt/old/klt/convolve[2:1]

.[5]

cvsh_src/ipp/ipp_annotations[2:1]

cvsh_src/grid/root/grid_region[2:1]

.[1]

.[2]

cvsh_src/ext/klt/old/klt/selectGoodFeaturescvsh_src/ext/klt/old/klt/pyramid

[2:1].[6]

cvsh_src/math/proj2d/math_proj2d_util[2:1]

.[2]

cvsh_src/lib/avi/vs_file_avi

.[1]

cvsh_src/vs/vs_file_dir[2:1]

cvsh_src/vs/vs_file_many[2:1].[3]

cvsh_src/ccam/pt/ccam_pt_calib[2:1]

.[3]

.[10]

cvsh_src/util/util_endian[2:1]

.[1]

.[2]

.[2]

cvsh_src/ext/sift/ext_sift_avLowe

.[1]

.[2]

.[3]

cvsh_src/vd/vd_file_single[2:1]

cvsh_src/vd/vd_file[2:1]

.[3]

cvsh_src/img/io/img_io_save_util[2:1]

.[11]

cvsh_src/cli/cli_wrap[2:1]

cvsh_src/cli/cli_wrapAbstract

.[1]

.[4]

cvsh_src/ext/klt/old/klt/example1

.[2]

cvsh_src/ext/canny/ext_cannyUtil[2:1]

.[4]

.[2]

cvsh_src/ext/klt/old/klt/klt_util[2:1]

.[31]

cvsh_src/alg/alg_dllStub

cvsh_src/util/util_dll

.[1]

.[1]

.[2]

.[4]

.[1]

.[3]

cvsh_src/ext/match/ext_match[2:1]

.[2]

.[2]

.[4]

.[8]

cvsh_src/math/la/math_la[2:1]

.[10]

.[19]

cvsh_src/ipp/ipp_regionGrowing[2:1]

.[11]

.[4]

.[5]

.[2]

.[2]

cvsh_src/lib/grab/vs_grab_linux1394_test.[2]

cvsh_src/lib/grab/vs_grabUtil[2:1]

.[1]

cvsh_src/ext/lines/alg_lines

.[1]

.[3]

cvsh_src/ext/lines/ext_linesUtil[2:1]

.[2]

.[1]

.[3]

cvsh_src/ipp/ipp_equalize[2:1]

.[1]

.[1]

.[5]

cvsh_src/alg/alg_crop

.[1]

.[1]

.[1]

.[2]

.[1]

.[2]

.[1]

.[4]

cvsh_src/util/util_math[2:1]

.[6]

cvsh_src/util/util_fs[2:1]

cvsh_src/util/util_ras[2:1]

.[1]

cvsh_src/alg/alg_multiplex

.[1]

cvsh_src/img/img_vector[2:1]

.[1]

.[3]

cvsh_src/alg/alg_rescale

cvsh_src/ipp/ipp_rescale[2:1]

.[1]

.[1]

.[2]

cvsh_src/ext/harris/ipp_harris[2:1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/ext/klt/birch/base

cvsh_src/alg/alg_average

.[1]

cvsh_src/ipp/ipp_lincomb[2:1]

.[1]

.[1]

.[2]

cvsh_src/util/util_os[2:1]

cvsh_src/ext/klt/old/klt/example4

.[1]

.[4]

.[9]

.[2]

cvsh_src/ext/rs232/w32/rs232_w32_imp[2:1]

cvsh_src/ccam/pt/ccam_pt_test.[1]

cvsh_src/ext/canny/ipp_convolve[2:1]

.[1]

cvsh_src/ext/canny/ck/ipp_ck_2d[2:1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/ext/noise/alg_noiseTS

.[1]

.[1]

.[1]

.[1]

cvsh_src/ipp/ipp_homography[2:1]

.[1].[1]

cvsh_src/win/ann/win_ann_util[2:1]

.[1]

cvsh_src/ext/noise/ipp_noiseAdditiveGaussian[2:1]

.[3]

.[4]

.[1]

.[1]

cvsh_src/ext/lines/ext_lines[2:1]

.[2]

cvsh_src/ext/canny/alg_canny

.[2]

.[1]

.[1]

.[3]

.[1]

cvsh_src/lib/avi/util_avi_unix

cvsh_src/lib/avi/util_avi.[1]

cvsh_src/ext/canny/ipp_convolve_hor[2:1]

cvsh_src/ext/canny/ipp_convolve_hor_gen[2:1]

.[8]

cvsh_src/alg/alg_projection

.[1]

.[1]

.[3]

cvsh_src/ipp/ipp_negate[2:1]

.[1]

.[1]

.[2]

.[1]

.[1]

.[5]

.[15]

.[1]

cvsh_src/img/access/img_access_util[2:1]

.[1]

.[2]

.[1]

.[1]

cvsh_src/ipp/ipp_add[2:1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/ext/ipv/ext_ipt

cvsh_src/vs/vs_file_txt[2:1]

.[4] cvsh_src/ext/klt/birch/klt_util[2:1]

cvsh_src/ext/klt/birch/klt[2:1]

.[8]

cvsh_src/ext/zhang/avf_workerZhang

.[1]

.[1]

.[5]

.[3]

.[2]

cvsh_src/ext/zhang/ipp_locateCircles[2:1]

.[1]

.[1]

cvsh_src/ipp/ipp_subsample[2:1]

.[2]

.[1]

.[1]

cvsh_src/grid/draw/grid_draw_x[2:1]

.[1]

cvsh_src/ext/canny/ipp_convolve_ver[2:1]

cvsh_src/ext/canny/ipp_convolve_ver_gen[2:1]

.[10]

cvsh_src/ccam/par/ccam_par[2:1]

.[2]

.[3]

cvsh_src/ext/klt/old/klt/storeFeatures.[2]

cvsh_src/grid/draw/grid_draw_file[2:1]

cvsh_src/grid/draw/grid_draw_rgb[2:1]

.[1]

.[3]

cvsh_src/lib/grab/vs_grab_w32PXC[2:1]

cvsh_src/util/util_w32[2:1]

.[3]

.[3]

.[1]

.[2]

.[1]

.[2]

.[2]

.[4]

cvsh_src/ext/canny/ck/ipp_ck_1d[2:1]

.[2]

.[2]

.[4]

cvsh_src/ccam/visca/ccam_visca_interface.[1]

cvsh_src/ext/rs232/rs232_util[2:1]

.[2]

cvsh_src/alg/alg_equalize

.[1]

.[1]

.[3]

.[1]

cvsh_src/ccam/par/ccam_par_fixed[2:1]

.[3]

cvsh_src/util/util_fs_w32

.[1]

cvsh_src/ext/klt/alg_klt

cvsh_src/ext/klt/ext_klt_view[2:1]

.[4]

.[1]

.[1]

.[1]

.[3]

cvsh_src/win/ann/win_ann_dump[2:1]

.[1]

.[1]

cvsh_src/ext/ipv/ext_ipv_libmastif[2:1]

.[1]

.[1]

.[1]

.[1]

.[1]

.[1]

cvsh_src/cvsh/cvsh_createAlg[2:1]

.[3]

cvsh_src/thr/thr_primitives_unixcvsh_src/thr/thr_primitives

.[1]

cvsh_src/ccam/pt/ccam_pt_visca[2:1]

.[1]

.[2]

.[5]

.[15]

cvsh_src/ext/signsHSI/alg_signsHSI

.[1]

.[1]

cvsh_src/ext/signsHSI/nadjiBoju[2:1]

.[1]

.[1]

cvsh_src/ext/signsHSI/RGBtoHSI[2:1]

.[1]

.[1]

.[3]

cvsh_src/ext/signsHSI/narastanje[2:1]

.[1]

cvsh_src/vs/vs_file_single[2:1]

.[9]

.[3]

.[7]

cvsh_src/math/proj2d/alg_homography_test

.[1]

cvsh_src/math/proj2d/math_proj2d_ann[2:1]

.[2]

.[2]

.[1]

.[1]

.[3]

.[1]

cvsh_src/util/util_dll_w32.[1]

cvsh_src/util/util_dll_unix.[1]

.[1]

cvsh_src/ipp/ipp_transform

.[1]

cvsh_src/img/img_vectorAbstract

.[2]

.[3]

.[4]

.[1]

cvsh_src/lib/avi/vs_file_wmv_unix

.[1]

.[1]

.[1]

cvsh_src/ext/steer/alg_steer

.[1]

.[1]

.[1]

.[1]

.[3]

.[2]

cvsh_src/math/la/math_la_util[2:1]

.[1]

cvsh_src/grid/draw/grid_draw_fileEps[2:1]

.[3]

.[2]

.[9]

.[2]

.[4]

.[2]

.[2]

.[6]

cvsh_src/ext/zhang/alg_matchGrid

.[1]

.[1]

.[6]

.[3]

.[1]

.[1]

.[4]

.[1]

cvsh_src/ipp/ipp_radial[2:1]

.[1]

.[1]

cvsh_src/vd/vd_win[2:1]

.[4].[3] .[1]

.[4]

cvsh_src/ext/ipv/alg_ipvIpt

.[1]

.[3]

.[1]

.[2]

.[1]

.[1]

.[2]

.[1]

cvsh_src/math/proj2d/math_proj2d_transform[2:1]

.[3]

cvsh_src/ext/klt/old/klt/example2

.[2]

cvsh_src/ipp/ipp_stretch[2:1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/alg/alg_subsample

.[1]

.[1]

.[3]

.[6]

cvsh_src/win/w32/win_w32_worker[2:1]

.[1]

.[4]

.[3]

cvsh_src/win/event/win_event_queue[2:1]

.[2]

cvsh_src/thr/thr_base[2:1]

.[2]

cvsh_src/img/io/img_io_save_bmp[2:1]

.[1]

cvsh_src/grid/draw/grid_draw_w32[2:1]

.[1]

.[3]

.[3]

cvsh_src/ext/klt/old/klt/base

.[1]

.[2]

.[5]

cvsh_src/cli/cli_parser[2:1]

.[2]

.[5]

cvsh_src/math/proj2d/math_proj2d_homography[2:1]

.[10]

.[3]

cvsh_src/cvsh/cvsh_main

.[1]

cvsh_src/ui/ui[2:1]

.[14]

cvsh_src/ext/rs232/unix/rs232_unix[2:1] .[1]

.[3]

.[1]

.[1]

cvsh_src/ext/lines/ext_linesPartition[2:1] .[3]

.[1]

.[2]

cvsh_src/math/tnt/math_tnt_la[2:1]

.[2]

.[2]

cvsh_src/ext/lmdif/lmdif[2:1]

.[2]

cvsh_src/ext/signsHSI/alg_signsGT

.[1]

.[1]

.[1]

.[3]

cvsh_src/ext/harris/ext_harris[2:1]

.[1]

.[3]

.[1]

.[1]

.[1]

.[1]

.[2]

.[1]

cvsh_src/ext/harris/ipp_nms7x7[2:1]

.[1]

.[2]

.[2]

.[3]

.[1]

.[2]

.[1]

.[2]

.[3]

.[1]

.[1]

.[1]

.[2]

cvsh_src/ext/klt/ext_klt[2:1]

.[8]

.[2]

cvsh_src/lib/avi/vd_file_avi[2:1]

.[3]

.[1]

cvsh_src/ext/lines/ipp_wphtData[2:1]

.[1]

.[3]

cvsh_src/lib/imgio/img_io_load_png

.[2]

.[2]

cvsh_src/vs/vs_grab_test

.[1]

.[1]

cvsh_src/ext/harris/alg_harris

.[1]

.[1]

.[1]

.[3]

cvsh_src/ext/harris/ext_harrisUtil[2:1]

.[4]

cvsh_src/ext/klt/old/klt/trackFeatures

.[6]

cvsh_src/ext/ipv/ext_ipv_libmastif_dummy .[1]

cvsh_src/ext/zhang/ipp_morphRegion[2:1]

.[3]

.[1]

.[2]

.[1]

cvsh_src/ext/match/ext_match_sift[2:1]

.[1]

.[4]

cvsh_src/win/x/win_x_renderer[2:1]

cvsh_src/img/io/img_io_load_bmp

.[2]

.[2]

.[1]

cvsh_src/vd/vd_file_srs[2:1]

.[3]

.[1] cvsh_src/img/io/img_io_save_pxm[2:1]

.[10]

cvsh_src/img/io/img_io_save_ras[2:1]

.[5]

.[3]

cvsh_src/img/access/img_access_fill[2:1]

.[1]

.[2]

.[11]

.[1]

.[2]

cvsh_src/thr/thr_base_test

.[2]

cvsh_src/ext/rs232/w32/rs232_w32_test

cvsh_src/ext/rs232/w32/rs232_w32[2:1]

.[1]

.[37]

cvsh_src/ui/ui_cmd[2:1]

.[2]

cvsh_src/win/root/win_test

.[2]

.[1]

.[1]

.[1]

.[1]

.[1]

.[1]

cvsh_src/ext/lines/ipp_extractLines[2:1]

.[1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/img/io/img_io_save[2:1]

.[1]

.[1]

cvsh_src/ext/klt/birch/trackFeaturescvsh_src/ext/klt/birch/pyramid

[2:1].[6]

cvsh_src/ccam/pt/ccam_pt_dumb[2:1]

.[2]

.[1]

cvsh_src/win/w32/win_w32[2:1]

.[5]

.[10]

.[1]

.[1]

cvsh_src/ipp/ipp_findMax[2:1]

.[1]

.[4]

.[2]

.[1]

.[2]

.[1]

.[1]

.[2]

.[12]

.[4]

.[6]

.[6]

.[2]

.[4]

.[4]

.[1]

.[1]

.[1]

.[1]

cvsh_src/cvsh/cvsh_createVD[2:1]

.[11]

.[2]

cvsh_src/alg/alg_decoratorScale[2:1]

.[2]

cvsh_src/cvsh/cvsh_createVS[2:1]

.[8]

cvsh_src/alg/alg_grayscale

.[1]

.[2]

cvsh_src/vs/vs_file_util[2:1]

.[9]

.[1]

.[2]

.[1]

.[3]

cvsh_src/ext/libvs/karla/v1/hr_fer_zemris_mastif_LibVSInterface

.[3]

.[3]

.[1]

.[2]

.[1]

.[1]

.[2]

.[10]

cvsh_src/ext/klt/old/klt/example5

.[2]

cvsh_src/win/x/win_x_thread[2:1]

.[1]

.[5]

.[1]

.[2]

.[1]

.[1]

cvsh_src/win/x/win_x_renderer_imlib[2:1]

.[2]

.[6]

cvsh_src/util/util_time_macx

.[1]

.[4]

cvsh_src/avf/avf_createCcam[2:1]

.[1]

.[3]

.[1]

.[2]

.[2]

cvsh_src/alg/alg_histogram

.[2]

.[1]

.[2]

cvsh_src/win/x/win_x_connection[2:1]

.[1]

.[4]

.[6]

.[2]

.[1]

.[2]

cvsh_src/ext/sift/ext_sift_keypoint[2:1]

.[1]

.[9]

cvsh_src/lib/grab/vs_grab_linuxV4L[2:1]

.[2]

.[3]

.[2]

.[2]

.[1]

.[2]

.[1]

.[4]

cvsh_src/grid/alg/grid_alg_rasterLine[2:1]

.[1]

cvsh_src/ext/libvs/ext_libvs_test

.[1]

.[2]

cvsh_src/lib/avi/util_avi_w32

.[1]

.[1]

.[3]

.[5]

.[1]

.[2]

cvsh_src/ext/klt/birch/storeFeatures.[2]

.[2]

.[1]

.[2]

.[2]

cvsh_src/ext/rs232/unix/rs232_unix_test

.[1]

.[6]

.[6]

.[5]

.[1]

.[3]

.[2]

.[2]

.[1]

.[3]

.[28]

.[19]

.[6]

cvsh_src/util/util_fs_unix .[1]

cvsh_src/ccam/pt/ccam_pt_dpAsc[2:1]

.[2]

.[2]

.[5]

.[1]

.[35]

.[1]

.[3]

.[3]

.[2]

.[1]

.[1]

.[2]

.[1]

.[1]

.[2]

.[1]

.[3]

.[5]

.[18]

.[1]

.[1]

.[2]

.[2]

cvsh_src/avf/avf_main

.[2].[1]

.[1].[3]

.[3]

.[2]

cvsh_src/util/util_time_linux

.[1]

.[60]

cvsh_src/lib/avi/vs_file_avi_unix

.[1]

.[1]

.[2]

.[1]

.[2]

cvsh_src/ext/klt/old/klt/main

cvsh_src/ext/klt/birch/convolve[2:1]

.[23]

.[1]

.[2]

.[1]

.[2]

cvsh_src/ext/ipv/ext_ipv_libmastif_test

.[1]

.[11]

.[5]

.[1]

.[2]

.[4]cvsh_src/ext/lmdif/lmdif_test.[1]

.[7].[9]

cvsh_src/ext/klt/old/klt/pnmio

.[14]

.[6]

.[10]

cvsh_src/ext/klt/birch/error

.[7]

cvsh_src/ext/match/alg_match

.[2]

.[2]

.[1]

.[1]

.[1]

.[1]

.[2]

.[2]

.[1]

.[4]

.[5]

.[1]

.[5]

cvsh_src/thr/thr_primitives_w32 .[1]

.[9]

.[2]

cvsh_src/ext/canny/ck/ipp_ck_gauss[2:1]

.[2]

cvsh_src/ext/empty/alg_empty

.[1]

.[1]

.[1]

.[2]

cvsh_src/lib/imgio/img_io_load_jpeg

.[2].[2]

.[3]

.[1]

.[1]

.[1]

cvsh_src/alg/alg_saver

.[1]

.[1]

.[5]

.[1]

.[2]

.[1]

.[1]

.[1]

.[1]

.[3]

.[1]

.[3]

.[2]

.[3]

.[2]

.[2]

.[3]

.[6]

cvsh_src/avf/avf_workerDllStub

.[1]

.[2]

.[1]

.[1]

.[1]

.[1]

.[2]

.[2]

cvsh_src/ext/klt/birch/selectGoodFeatures

.[6]

.[9]

cvsh_src/alg/alg_nop

.[1]

.[1]

.[2]

.[3]

.[1]

.[3]

.[2]

.[1]

.[2]

.[2]

cvsh_src/ext/ipv/alg_ipvTriangle

.[6]

.[1]

.[1]

.[3]

.[1]

.[3]

.[2]

.[2]

.[1]

.[2]

cvsh_src/ext/klt/old/klt/writeFeatures

.[4]

cvsh_src/ccam/par/ccam_param

cvsh_src/alg/alg_radial

.[1]

.[1]

.[1]

.[1]

.[3]

cvsh_src/lib/avi/vs_file_avi_w32

.[1]

.[1]

.[2]

.[1]

cvsh_src/util/util_time_w32 .[1]

cvsh_src/ext/match/ext_match_fake[2:1]

.[2]

.[1]

.[1]

.[1]

.[2]

.[1]

.[2]

.[7]

.[2]

cvsh_src/img/access/img_access_test

.[3]

.[1]

cvsh_src/win/x/win_x[2:1]

.[5]

.[1]

.[2]

.[17]

cvsh_src/ccam/pt/ccam_pt_mgr[2:1]

.[1]

.[1]

(graf ovisnosti komponenata jednog programa srednje veličine)Uvodno predavanje → Motivacija (4) 7/28

Page 8: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: primjer 3Do dobre koncepcije dolazimo apstrakcijom (skrivanjem nebitnog)

ftp://ftp.oreilly.com/pub/poster/oreilly_linux_poster.pdf

Uvodno predavanje → Motivacija (5) 8/28

Page 9: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: primjer 4Moderni programski okviri apstrahiraju programske biblioteke isklopovske arhitekture (klijentski kod ne mora znati za to)

Tensorfow execution engine

C++/libstdc++

Python/numpy Java, Go, ...

Eigen OpenBLAS cuDNN

OpenMP

GPUCPU

CUDA

Tema kolegija: načela i pristupi za ostvarivanje korisnih apstrakcija.

Uvodno predavanje → Motivacija (6) 9/28

Page 10: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: OOUPZašto mislim da bi vam ovaj kolegij mogao biti interesantan?

□ Ciljana publika: budući profesionalni programeri□ Činjenica: jednostavni programi napisani (sazrijevanje!)

(početni položaji zauzeti, ad-hoc pristupi ne pale)□ Zaposlenje 1: održavanje mastodonta

(stabilno okruženje, razumijevanje postojeće organizacije)□ Zaposlenje 2: rad na novom ambicioznom proizvodu

(dinamično okruženje, prilagođavanje organizacije domeni)□ U oba slučaja težimo održivoj evoluciji proizvoda□ Vidjet ćemo da ključ uspješne evolucije predstavlja adekvatna

programska organizacija!

Uvodno predavanje → Motivacija (7) 10/28

Page 11: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: Fokus OOUP-aFokus predmeta: organiziranje komponenata u veći sustav

□ koristit ćemo idiomatski pristup s vrha prema dnu;razmatrat ćemo rješenja: načela, idiome, obrasce

□ treba nam duboko poznavanje tehnika koje omogućavajuoblikovanje fleksibilnih programskih komponenata

□ mogu se 'saviti' kako bi 'upile' promjene□ mogu se koristiti na različite načine

□ posebnu pažnju ćemo pokloniti dinamičkom polimorfizmu□ mehanizme izvedbe u C++-u i Pythonu proučava prva laboratorijska

vježba

Uvodno predavanje → Motivacija (8) 11/28

Page 12: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: Jezik vs oblikovanje

Zašto poznavanje mehanike jezika nije dovoljno?□ uspješni jezici su nesavršeni i opterećeni prošlošću□ dani problem se može izvesti na mnogo korektnih načina:

jezični pokazatelji za njihovo vrednovanje prelokalni i nedovoljni!□ primjer standardne biblioteke C-a: zašto gets ne valja?

NAMEgets - get a string from standard input (DEPRECATED)

SYNOPSISchar *gets(char *s);

DESCRIPTIONNever use this function.

□ nema garancije da jezično korektna i jasna komponenta imazadovoljavajuća svojstva i u širem oblikovnom kontekstu!

Uvodno predavanje → Motivacija (9) 12/28

Page 13: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: Jezik vs oblikovanje (2)Primjer: komponenta Image izravno koristi vanjsku biblioteku acmeTiff v1.0

class Image{

// ...

void load(char const* path);

};

void Image::load(char const* path){

switch (util:: extension(path )){

// ...

case "tif":{

ImageFmt fmt;

acmeTiffGetFmt(path , fmt);

this ->reformat(fmt);

acmeTiffLoad(path ,this ->getBuffer ());

}

};

Ovakve ovisnosti o vanjskim komponentama mogu stvoriti probleme.□ procjena razvojnog napora za libtiff: 18 osoba-godina (COCOMO).

Uvodno predavanje → Motivacija (10) 13/28

Page 14: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Motivacija: Jezik vs oblikovanje (3)Razmotrimo sljedeći (sasvim mogući) scenarij:

□ u acmeTiff v1.0 otkriveni neugodni bugovi□ acmeTiff v2.0 izdan pod nezgodnom licencom□ korisnici naše komponente su u nevolji (vendor lock-in anti pattern)

Neki korisnici mogu podnijeti višu cijenu, drugi ne: odjednom imamodvije verzije komponente (glavobolja za održavanje)Rješenje:

□ izdvojiti metodu load u zasebnu komponentu□ ta komponenta mora ispitati je li acmeTiff dostupna (introspekcija)□ u slučaju nedostupnosti bacamo iznimku

Nema garancije da jezično korektna i jasna komponenta imazadovoljavajuća svojstva i u širem oblikovnom kontekstu!

Uvodno predavanje → Motivacija (11) 14/28

Page 15: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Oblikovne osnove: ciljevi razvojaKoja svojstva programskog sustava želimo ostvariti?

1. korektnost: program obavlja svoj posao(algoritmi, strukture podataka)

2. zadovoljavajuća performansa: program radi dovoljno brzo(napredni algoritmi i strukture podataka, arhitektura računala)

3. ugodan izgled: lijepo korisničko sučelje(ergonomija, grafičko oblikovanje)

4. lako održavanje: razumijevanje, ispitivanje, popravljanje(programsko oblikovanje, dokumentacija)

5. fleksibilnost (podatnost): lako nadograđivanje, toleriranjepromjena(programsko oblikovanje)

Statička (1-3) vs. dinamička (4-5) svojstva programaOrganizacija - ključ dinamike programskog sustava!

Uvodno predavanje → Oblikovne osnove 15/28

Page 16: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Oblikovne osnove: važnost dinamike razvojaDinamička svojstva su važna jer se pokazuje da se do dobrih programane dolazi ``iz prve''

Primjer realnog scenarija nakon pola godine razvoja:□ nepotpuna korektnost:

(polovična funkcionalnost, novi zahtjevi, bube švabe)□ brzina možda i prihvatljiva□ korisnici nezadovoljni lakoćom korištenja

Uz malo dobre sreće, v1.0 može biti prihvatljiva□ investitori pristaju financirati novu verziju□ čvrsti uvjet nastavka: dinamička svojstva programa!

Uvodno predavanje → Oblikovne osnove 16/28

Page 17: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Oblikovne osnove: važnost dinamike razvoja (2)Zanimljiva priča iz života:

□ 1998: Google se ponudio Yahoou za 1e6US$□ Page i Brin (tada znanstveni novaci) su htjeli nastaviti studij...□ Yahoo odbija, Page i Brin u garaži prijateljice otvaraju d.o.o

□ 2002: Yahoo nudi Googleu 3e9US$□ Google traži 5e9US$□ Yahoo odbija

□ 2008: Microsoft nudi Yahoou 40e9US$□ Yahoo odbija, Microsoft kupuje Fast za 1.2e9US$

□ 2018: Google vrijedi preko 500e9US$□ Yahoo prodan za 5e9US$ (2016)

Google je nadjačao Yahoo (i ostale) jer se brže i bolje razvijao:□ bolji program za indeksiranje interneta (engl. web crawler)□ bolji algoritam za rangiranje stranica (pagerank)□ bolje i brže korisničko sučelje (kratki kontekst, samo jedna slika)

Uvodno predavanje → Oblikovne osnove (2) 17/28

Page 18: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Oblikovne osnove: kako postići dobru dinamikuDobru dinamiku programskog projekta omogućit će kôd:

□ kojeg je lako ispitati (engl. testable)□ koliko brzo možemo provjeriti sumnju da komponenta X ne radi?

□ kojeg je lako razumjeti (engl. readable)□ hoće li se snaći programer kojeg smo zaposlili prošli tjedan?

□ kojeg je lako popraviti odnosno izmijeniti (engl. maintainable)□ koliko brzo možemo onemogućiti zbrajanje popusta?

□ kojeg je lako nadograditi (engl. extensible)□ ako promijenimo A, hoćemo li morati mijenjati B, C, D?

Navedena svojstva (tzv. -ilities, non-functional requirements) postižu seprikladnom organizacijom!

□ to je upravo predmet proučavanja našeg kolegija

Nabrojali smo dobra svojstva gotovih programa;kako do takvih programa doći?

Uvodno predavanje → Oblikovne osnove (3) 18/28

Page 19: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Proces: klasično vs agilno oblikovanjeModel razvojnog procesa propisuje smjernice razvoja programa

□ Royce 1970 - vodopadni model:zahtjevi→ oblikovanje→ izvedba→ispitivanje→ održavanje

□ 198x,199x: iterativne modifikacijevodopadnog modela

□ 21. stoljeće: pojava agilnih razvojnih procesa□ iterativno dodavanje prioritetne funkcionalnosti:

piecemeal growth vs. masterplan□ kratke iteracije, dnevna testiranja, česta komunikacija,

prilagodljivost, tehnička izvrsnost□ prihvaćanje realnosti: promjenljivi zahtjevi, nepredvidljivi problemi,

heterogenost razvojnog tima, ...

Uvodno predavanje → Proces 19/28

Page 20: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Proces: agilni modeliNedostatci (i "nedostatci") agilnih modela razvojnog procesa:

□ nema garancije da program stvarno radi!(što ako se bug manifestira u avionu na 3000m?)

□ fokus na kôd, umjesto na oblikovanje: divlji zapad!

Prednosti agilnih modela razvojnog procesa:□ agilni modeli zahtijevaju kontinuirano oblikovanje

□ u početku malo znamo o domeni i ne možemo oblikovati□ ideja: svjesno alocirati resurse u ovisnosti o odnosu između cijene

razvoja i prihvatljivog rizika□ nema garancije da agilno razvijeni program uistinu radi, ali to ne

nude ni alternativni pristupiUvodno predavanje → Proces 20/28

Page 21: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Proces: evolucija, inovacijaČinjenica: uspješni programi današnjice nastali evolucijom

□ Windows Vista (50 MLoC)← 86-DOS (1980)□ Linux 2.6 (5 MLoC)← Linux 0.01 (1991, 10 KLoC)

Zaključak: programiranje nije slično građevinarstvu!□ bar ne toliko koliko to implicira vodopadni model□ za konkurentnost potrebna konstantna inovacija!

(naše implementacije lako se prepravljaju i isporučuju)

Naš prirodni habitat je fronta tehnološke ekspanzije□ profit se odselio s osobnog računala: tablični kalkulator je davno

napisan (VisiCalc, 1979, 7e5 primjeraka, Apple II)□ mobilne platforme, oglašavanje, umrežene aplikacije;

razumijevanje slike, govora, prirodnog jezika; napredne ugrađene irobotičke primjene...

Uvodno predavanje → Proces (2) 21/28

Page 22: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

Proces: sloccount linuxsloccount linux-2.6.28.7 (kazala)SLOC Directory SLOC -by-Language (Sorted)3340479 drivers ansic =3336030 , yacc =1688,asm=1136, perl =829,lex=779,

sh=171338785 arch ansic =1127349 , asm =209975 ,sh=615, yacc =307,lex=300,

awk=96, python =45, pascal =41,sed=29,perl =28545820 fs ansic =545820377581 net ansic =377581356592 sound ansic =356409 , asm =183250442 include ansic =248816 , cpp=1515, pascal =75,asm=3674639 kernel ansic =74334 , perl =30536459 mm ansic =3645932743 crypto ansic =3274325316 security ansic =2531624193 scripts ansic =14432 , perl =4707,cpp=1791,sh=1175, yacc =967,

lex=742, python =37917146 lib ansic =1714610742 block ansic =107427712 Documentation ansic =5615,sh=1022 , perl =857, lisp =2185243 ipc ansic =52432658 virt ansic =26582283 init ansic =22831803 firmware asm =1598, ansic =205833 samples ansic =833493 usr ansic =491,asm=2

Uvodno predavanje → Proces (3) 22/28

Page 23: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetuŠto ćemo proučavati?

□ elementi programske organizacije na razinama komponente(.5 kLoC), te paketa ili podsustava (5 kLoC)

□ pretpostavljamo izvorni kôd opće namjene□ komponente mogu biti dio mobitelske aplikacije, ugradbenog

uređaja, autonomnog robota, istraživačkog kôda, ...

□ organizacijska načela, te oblikovni obrasci kojima se ona postižuza učestale razrede problema

□ izabrane programske tehnike za ostvarivanje oblikovnih ciljeva(polimorfizam, dinamičke biblioteke, ugovorno oblikovanje)

Gradivo je većim dijelom agnostično s obzirom na operacijski sustav,programski jezik i model razvojnog procesa.

Pretpostavljamo osnovna znanja iz domene objektno orijentiranogprogramiranja (dinamički polimorfizam ćemo temeljito ponoviti).

Uvodno predavanje → O predmetu 23/28

Page 24: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetu: uvjeti, bodoviAktivnosti: predavanja, vježbe (C, C++, Python, Java, ?), međuispit,završni ispit, klasični ispit

Kalendar nastave:kraj ožujka: L1sredina travnja: L2kraj travnja: MIsredina svibnja: L3početak lipnja: L4sredina lipnja: ZIpočetak srpnja: KI

Kontinuirana provjera:laboratorij: 10 (A) + 10 (B)ispiti: 40, 40preduvjet: 40% laboratorija

Klasični ispit:preduvjet: 40% laboratorija

Mogućnost dobivanja bonus bodova za: korisne sugestije, prijedlogenovih tema ili vježbi, ekstra zadatke, seminare.

Ocjenjivanje: 2: 50%, 3: 63%, 4: 76%, 5: 89%.

Uvodno predavanje → O predmetu 24/28

Page 25: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetu: planŠto ćemo raditi tijekom ovog semestra?

1. načela programske organizacije:□ motivacijski primjer, tehnike programiranja□ načela logičkog i fizičkog oblikovanja

2. osnovni oblikovni obrasci3. ostali oblikovni obrasci

Vježbe će se izvoditi u C-u, C++-u, te Pythonu ili Javi□ neke vježbe treba izvesti u C-u (1.1, 3.1.1) i C++-u (1.2-1.5, 3.1.3)

(pogledajte cppčpp, javite kako da ga poboljšamo)□ možete riješiti samo jednu od vježbi 3.1.2, 3.1.3, i 3.1.4□ ostale vježbe možete pisati u proizvoljnom jeziku□ prevoditelj i operacijski sustav su proizvoljni□ termin za nadoknadu jedne vježbe: krajem semestra

Uvodno predavanje → O predmetu (2) 25/28

Page 26: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetu: literaturaObrasci i načela programskog oblikovanja:

□ Design Patterns; Erich Gamma, Richard Helm, Ralph Johnson,John Vlissides; Addison-Wesley; 1995

□ Agile Software Development: Principles, Patterns, and Practices;Robert C. Martin; Prentice Hall; 2002

□ Head First Design Patterns; Elisabeth Freeman, Eric Freeman,Bert Bates, Kathy Sierra; O'Reilly Media, Inc.; 2004

□ Large-Scale C++ Software Design; John Lakos; Addison-Wesley;1996

□ Effective Modern C++; S. Meyers; O’Reilly Media; 2014□ The Elements of Programming Style; Brian W. Kernighan, P. J.

Plauger; Computing Mcgraw-Hill; 1978

Uvodno predavanje → O predmetu (3) 26/28

Page 27: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetu: literatura (2)Modeli razvojnog procesa

□ The Mythical Man-Month; F. Brooks; Addison Wesley; 1995□ The Pragmatic Programmer; A. Hunt, D. Thomas; Addison

Wesley; 2000□ Generative Programming: Methods, Tools, and Applications;

Krysztof Czarnecki, Ulrich Eisenecker; Addison-WesleyProfessional; 2000

□ Extreme Programming Adventures in C#; Ron Jeffries; MicrosoftPress; 2004

Uvodno predavanje → O predmetu (4) 27/28

Page 28: Oblikovni obrasci u programiranju - Zavod za elektroniku ...ssegvic/pubs/ooup0Intro.pdf · Oblikovni obrasci u programiranju Uvodno predavanje Siniša Šegvić Sveučilište u Zagrebu

O predmetu: literatura (3)Literatura: C++, generičko programiranje

□ [More] Effective {C++|STL}; S. Meyers; Addison Wesley; 1996□ C++ FAQs; Marshall P. Cline, Greg Lomow, Mike Girou;

Addison-Wesley Professional; 1998□ Demistificirani C++; Julijan Šribar i Boris Motik; Element; 2006□ Generic Programming and the STL: Using and Extending the C++

Standard Template Library; Addison-Wesley Professional;Matthew H. Austern; 1998

□ C++ Templates: The Complete Guide; David Vandevoorde, NicolaiM. Josuttis Addison-Wesley Professional; 2002

□ Inside the C++ object model; Stanley Lippman; Addison-WesleyProfessional; 1996

Uvodno predavanje → O predmetu (5) 28/28