universitatea babeŞ-bolyai facultatea de matematică şi...

14
ALGORITMI ȘI PROGRAMRE Laura Dioşan Programare modulară UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică

Upload: others

Post on 16-Jan-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

ALGORITMI ȘI

PROGRAMRE

Laura Dioşan

Programare modulară

UNIVERSITATEA BABEŞ-BOLYAI

Facultatea de Matematică şi Informatică

Page 2: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Conținut curs Programming in the large

Introducere în procesul de dezvoltare software

Programare procedurală

Programare modulară

Tipuri definite de utilizator

Principii de dezvoltare a softului

Testarea și inspectarea programelor

Programming in the small Recursivitate

Complexitatea algoritmilor

Algoritmi de căutare

Algoritmi de sortare

Metode de rezolvare a problemelor

Recapitulare

Octo

mbri

e,

2018

A&P

2

Page 3: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Conținut

Programare modulară Concept

Definirea și importarea modulelor

Pachete

Organizarea unei aplicații pe module și pachete

Excepții Concept

Mecanism

Fișiere Concept și tipologie

Prelucrarea datelor de intrare și ieșire

Octo

mbri

e,

2018

A&P

3

Page 4: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Concept

metoda de proiectare a unui algoritm prin folosirea modulelor

Bazată pe descompunerea problemei în subprobleme având în vedere: separarea conceptelor arhitecturi stratificate întreținerea și reustilizabilitatea codului coeziunea elementelor dintr-un modul cuplarea (legarea) modulelor între ele

Modulul unitate structurală

separată/independentă (dar cu posibilități de comunicare cu alte unități),

interschimbabilă colecție de funcții și variabile care implementează una sau mai

multe funcționalități bine definite facilitând gruparea funcționalităților înrudite dezvoltarea și întreținerea funcționalităților înrudite rezolvarea conflictelor de nume

Octo

mbri

e,

2018

A&P

4

Page 5: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Definirea modulelor în Python

Modul = fișier care conține instrucțiuni și definiții Python:

Variabile – nume globale la nivelul modulului

Definiții de funcții – disponibile în acel modul și în alte module care importă modulul curent

Alte instrucțiuni – de inițializare

Un modul are

un nume (__name__)

__main__ - dacă modulul este executat de sine stătător

numeModul – dacă modulul este importat în alt modul

o descriere (__doc__)

Descrie conținutul modulului, scopul acestuia și modul de utilizare

o tabelă de simboluri care conține toate numele (variabile și funcții) introduse de modul – dir(modulName)

Octo

mbri

e,

2018

A&P

5

#... def gcd(a, b): #... def test_gcd(): assert gcd(0, 2) == 2 #... if __name__ == "__main__": test_gcd()

Page 6: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Importarea modulelor în Python

Un modul Python poate importa alte module

import [path.]moduleName

elemente ale unui modul

From moduleName import itemName

Instrucțiunea import Introduce un modul (caută numele modului în:

Directorul curent (acolo unde s-a scris import...)

Lista de directoare specificată de PYTHONPATH

Lista de directoare specificată de PYTHONHOME)

Dacă modulul există

Dacă a fost deja importat – nu se face nimic

Altfel – variabilele și funcțiile definite în modul se inserează într-o nouă tabelă de simboluri (un nou spațiu de nume); în tabela de simboluri curentă se introduce (reține) doar numele modulului importat

Altfel

se aruncă o excepție ImportError

Octo

mbri

e,

2018

A&P

6

import utils.numericlibrary def sum(r1, r2):

#... divisor = utils.numericlibrary.gcd(numerator, denominator) rs = [numerator / divisor, denominator / divisor] return rs

from utils.numericlib import gcd print gdc(2,6)

Page 7: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Importarea modulelor în Python

La importarea unui modul Variabilele și funcțiile definite în modul sunt inserate într-o nouă tabelă de

simboluri (un nou spațiu de nume)

Numele modulului (__name__) este inserat în tabela de simboluri curentă

Octo

mbri

e,

2018

A&P

7

#only import the name ui.console into the current symbol table import ui.console #invoke run by providing the doted notation ui.console of the package ui.console.run() #import the function name gdc into the local symbol table from utils.numericlib import gcd #invoke the gdc function from module utils.numericlib print gdc(2,6) #import all the names (functions, variables) into the local symbol table from rational import * #invoke the rational_add function from module rational print rational_sum([2,6],[1,6])

Page 8: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Importarea modulelor în Python

Funcții utile dir(numeModul)

permite vizualizarea tabelei de simboluri aferentă unui modul

help(numeModul)

Informații despre modul, tipurile de date și funcțiile din modul

pydoc

Modul care permite salvarea documentației în format HTML

Recom: folosirea în linia de comandă

Octo

mbri

e,

2018

A&P

8

Page 9: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Pachete în Python

Folosirea pachetelor o modalitate de structurare a codului

Dacă există multe module (fișiere) structurarea lor în directoare ierarhice

Ex. A.B înseamnă modulul B al pachetului A, adică directorul A conține un fișier B.py

Pachet Python = un director care conține module Python

modulul __init__.py – care conține instrucțiuni de inițializare

Importarea unui pachet Similară importării unui modul

Importarea modulelor dintr-un pachet import packageName.moduleName

from packageName.moduleName import itemName

Octo

mbri

e,

2018

A&P

9

Page 10: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Programare modulară Organizarea unei aplicații pe module și pachete

Interfață cu utilizatorul

Funcții legate de interacțiunea cu utilizatorul

Operații de citire și afișare – doar aici pot să apară

Domeniu

Funcții legate de conținutul propriu-zis al aplicației

Infrastructură

Funcții reutilizabile cu mare potențial

Coordonator al aplicației

Inițializarea și pornirea aplicației

Exemplu

Aplicația RationalNumbers conține următoarele pachete și module:

app.py – modulul de pornire a aplicației

domain

rational.py – modul pt calcule cu numere raționale

utils

numericlibrary.py – modul pt calcule matematice

ui

console.py – modul pt interfața cu utilizatorul

Octo

mbri

e,

2018

A&P

10

Page 11: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Recapitulare

Programare modulară

Octo

mbri

e,

2018

A&P

11

Page 12: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Cursul următor Programming in the large

Introducere în procesul de dezvoltare software

Programare procedurală

Programare modulară

Tipuri definite de utilizator

Principii de dezvoltare a softului

Testarea și inspectarea programelor

Programming in the small Recursivitate

Complexitatea algoritmilor

Algoritmi de căutare

Algoritmi de sortare

Metode de rezolvare a problemelor

Recapitulare

Octo

mbri

e,

2018

A&P

12

Page 13: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Materiale de citit şi legături utile

1. Limbajul Python http://docs.python.org/3/reference/index.html

2. Biblioteca standard Python http://docs.python.org/3/library/index.html

3. Tutorial Python http://docs.python.org/3/tutorial/index.html

4. Frentiu, M., H.F. Pop, Fundamentals of Programming, Cluj University Press, 2006, 220 pagini

5. Kent Beck.Test Driven Development: By Example. Addison-Wesley Longman, 2002 http://en.wikipedia.org/wiki/Test-driven_development

6. Martin Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999 http://refactoring.com/catalog/index.html

Octo

mbri

e,

2018

A&P

13

Page 14: UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi ...lauras/test/docs/school/FP/2018-2019/lectures/curs03.pdfLista de directoare specificată de PYTHONHOME) Dacă modulul există

Programare modulară

Informaţiile prezentate au fost colectate din diferite surse de pe internet, precum şi din cursurile de Fundamentele Programării ţinute în anii anteriori de către:

Lect. Dr. Adriana Guran – www.cs.ubbcluj.ro/~adriana

Lect. Dr. Istvan Czibula - www.cs.ubbcluj.ro/~istvanc

Lect. Dr. Andreea Vescan -www.cs.ubbcluj.ro/~avescan

Lect. Dr. Ioan Lazăr -www.cs.ubbcluj.ro/~ilazar

Lect. Dr. Molnar Arthur – www.cs.ubbcluj.ro/~arthur

Octo

mbri

e,

2018

14

A&P