Download as pdf or txt
Download as pdf or txt
You are on page 1of 23

PROGRAMIRANJE 2

Modularno programiranje

Robert Rozić, asis. dr. sc. Marko Rosić, prof.


Creative Commons
● Slobodno smijete:
○ dijeliti - umnožavati, distribuirati i javnosti priopćavati djelo
○ remiksirati - prerađivati djelo
● pod sljedećim uvjetima:
○ Imenovanje. Morate priznati i označiti autorstvo djela na način kako je specificirao autor ili
davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate
njegovu izravnu podršku).
○ Nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.
○ Dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga,
preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj.

U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog
djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće
je odstupiti, ako dobijete dopuštenje nositelja autorskog prava.
Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava.
Tekst licence preuzet je s https://creativecommons.org/.

Programiranje 2
Modularno programiranje

- Način organiziranja projektnog izvornog koda


- tehnika dizajniranja software-a koja je bazirana na osnovnom principu modularnog dizajna.
- Modularni dizajn kompleksni sustav cijepa na manje dijelove ili komponente tzv. module.
- Te komponente tj. module se mogu neovisno izrađivati i testirati.
- U mnogim slučajevima se također mogu koristiti i u nekim drugim sustavima.

Ukoliko želimo razviti program koji je lako čitljiv, pouzdan i relativno lak za
održavanje, potrebno je koristiti neki oblik modularnog dizajna software-a
i izbjegavati tzv. spaghetti kod (zapetljani kod bez jasne strukture)
Modularno programiranje

Pri izradi modularnog sustava, nekoliko modula razvija se odvojeno i više/manje


neovisni jedni o drugima.

Konačna aplikacija koja se izvršava se kreira povezivanjem više modula.

Svaki modul sadrži sve potrebno za izvršavanje samo određenog aspekta željene
funkcionalnosti.
Aspekti modularnog programiranja

Moduli najčešće formiraju direktni aciklični graf (directed acyclic graph) - DAG
To je graf bez usmjerenih ciklusa. Sastoji se od čvorova i usmjerenih grana.
Svaka grana povezuje jedan čvor sa drugim.
Ne postoji način da početkom u čvoru v vratimo na njega prateći redoslijed grana.

Ovaj koncept opisuje pozivanje modula jedan u drugom.


U slučaju gdje moduli formiraju DAG, mogu se hijerarhijski posložiti:
- Moduli najniže razine neovisni o drugim modulima
- Moduli viših razina koji su ovisni o modulima niže razine
Aspekti modularnog programiranja

Pri kreiranju modularnog sustava, umjesto kreiranja monolitne aplikacije, pišemo odvojene module
koji se kasnije slažu u konačnu aplikaciju.
Često se ovakvi moduli kompajliraju odvojeno, a kasnije su povezani “linkerom”.
Just-in-time kompajleri neki od ovih konstrukcija mogu izvršavati i za vrijeme izvođenja.

Pri radu s modularnim tehnikama programiranja nailazimo na uobičajene zajedničke uzorke za


korištenje modula i paketa uključujuči “divide and conquer” (podijeli pa vladaj) pristup
programiranju, korištenje apstrakcije i enkapsulacije, ideje pisanja proširivih modula itd.
Aspekti modularnog programiranja

Pisanje modularnog koda također je odličan način za dijeljenje koda tako što ćemo ga učiniti
dostupnim drugim programerima kako bi taj kod mogli koristiti u drugim programima i aplikacijama.
Za dijeljenje koda koristimo popularne alate kao što su GitHub, Python package index itd.

Kombinacijom ovih tehnika primjenjujemo “modularni način razmišljanja” kako bi kreirali što bolje
programe koje je lako održavati i na velikoj razini.
Modularno programiranje u Python-u

Što je Python modul ?

- Ne postoji određena sintaksa koja kreira python modul

- Svaka datoteka koja ima .py ekstenziju i sadrži Python kod

Modul može sadržavati objekte npr. datoteke, klase, atribute itd. kojima se može pristupiti nakon

uključivanja (import)

Postoji nekoliko načina za uključivanje modula u Python-u.


Python moduli

# Uključivanje math modula


import math
print(dir(math))
# Pozivanje pi atributa iz math modula
print(math.pi)

# Pozivanje funkcije sinus


math.sin(math.pi/2)
Python moduli

# Uključivanje više modula odjednom


import math, random

# Učitavanje pojedinih atributa modula


from math import sin, pi

# Uključivanje svih modula, za poziv bez imena modula


from math import *
Python moduli

# Alias na ime modula


import numpy as np

# Korištenje aliasa
np.sin(1)

# Alias na funkciju iz modula


from math import pi, pow as power, sin as sinus
Pisanje vlastitih modula
# Datoteka fibonacci.py
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
def ifib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
Pisanje vlastitih modula
# Datoteka test.py
import fibonacci

fibonacci.fib(5)
fibonacci.ifib(10)

# Pojedinačno
from fibonacci import fib, ifib

print(fib(5))
Pisanje vlastitih modula
# Datoteka fibonacci.py
print("Modul je ucitan!")
...

# Datoteka test.py
import fibonacci

# Ukoliko modul pokusamo ucitati opet, kod se nece izvrsiti


import fibonacci

# Za ponovni import koristimo reload iz importlib modula


from importlib import reload
reload(fibonacci)
Pisanje vlastitih modula
# Modul može biti učitan i kao skripta
if __name__ == "__main__":
import sys
print("Ucitano kao skripta")
fib(int(sys.argv[1])) # Argument iz terminala
Tipovi modula

- Python modul, napisani u pythonu


- .py ekstenzija
- Dinamički linkani C moduli Dynamically linked C modules
- .dll, .pyd, .so, .sl, …
- C moduli linkani interpreterom
Lista tih modula:
import sys
print(sys.builtin_module_names)
Python moduli

Kada učitavamo modul interpreter traži taj modul na sljedećim lokacijama ovim redom:
1. Direktorij datoteke koja se izvršava
2. Direktoriji PYTHONPATH, globalne environment varijable OS-a
3. Standardni Python direktorij npr. za Linux /usr/lib/python3.9

import random
print(random.__file__)
Zadaća

Funkciju iz prethodne zadaće učitati kao funkciju modula u novi program i pozvati je nakon traženja unosa
od korisnika.
PythonCourse

Modular programming with Python, Erik Westra


sumarum.sum.ba
Lozinka za pristup: Mostar2021! / Orasje2021!
marko.rosic@pmfst.hr
robert.rozic@fpmoz.sum.ba
HVALA NA POZORNOSTI !

You might also like