Laborator 6 - Paradigme de Programare

Documente similare
Laborator 5 - Paradigme de Programare

Laborator 9 - Paradigme de Programare Aplicații ale modelelor de proiectare utilizând Python Problema 1: Având în vedere că metodele de a realiza logg

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Microsoft Word - O problema cu bits.doc

Proiectarea Sistemelor Software Complexe

PROGRAMARE ORIENTATA PE OBIECTE

Limbaje de Programare Curs 8 – Fisiere

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Paradigme de programare

Ingineria Sistemelor de Programare

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Paradigme de Programare

Laborator 3

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Microsoft Visual C++ (abreviat MSVC) is a commercial integrated development environment (IDE) product engineered by Microsoft for the C, C++, and C++/

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Microsoft Word - CarteC.doc

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

CURS

PHP (II)

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

Limbaje de Programare Curs 6 – Functii de intrare-iesire

E_d_Informatica_sp_SN_2014_bar_10_LRO

Programarea şi utilizarea calculatoarelor

Lab6LCD

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Utilizare Internet

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

SUBPROGRAME

ALGORITHMICS

Top

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Elemente de Web design

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

CASA CORPULUI DIDACTIC BRAILA PROGRAM DE FORMARE INFORMATICA SI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: TIMOFTI V. AFRODITA COLEGIUL

Microsoft Word - PCLP2_Curs_4_2019.doc

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Subiectul 1

Paradigme de Programare

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Damoc Alina Timofte Maria 1. Rezumat: Implementarea unui dispozitiv ce permite verificarea tempe

AcadNet Etapa Naţională Secțiunea calculatoare, clasele Citiți cu atenție toate subiectele înainte de a începe rezolvarea. Aveți 15 minut

Creational design patterns

Cuantizare Vectoriala.doc

Programarea şi utilizarea calculatoarelor

Minicurs CCS C / Aplicatia1 1.Programul CCS C Compiler. Instalare.Creare proiect. Descarcati ultima versiune a programului de

Slide 1

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Aggregating Data

tehnologii web

Matematici aplicate științelor biologie Lab05 MV

Diapositive 1

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Microsoft Word - Curs_09.doc

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

PowerPoint Presentation

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Curs de formare Informatică și TIC pentru clasa a V-a Portofoliu pentru evaluarea finală Tema: ELEMENTE DE INTERFAŢĂ ALE UNUI SISTEM DE OPERARE (DESKT

Lucrarea 10

Matematici aplicate științelor biologie Lab06 MV

PowerPoint Presentation

EXCEL FĂRĂ SECRETE Grafice şi diagrame

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word - unitati de invatare 11liceu-12 sam

SRS-BTS50_QSG_ro

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Laborator 04: Apeluri de funcții

Cum stați cu auzul? Format ușor de citit Easy read Română Romanian How s your hearing? Dezvoltat în parteneriat de Action on Hearing Loss și CHANGE

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Laborator 1-Teoria probabilitatilor si statistica matematica Sef lucrari dr.mat. Daniel N.Pop Departamentul de calculatoare si inginerie electrica 1 P

Generarea semnalelor standard 1 Scopul lucrării Familiarizarea cu modul de generare şi reprezentare în mediul Matlab a semnalelor de test, considerate

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Manual de utilizare a Sistemului Informațional al Institutului Național al Justiției (SI INJ) intranet.inj.md Ver.2 Manual de utilizare a Sistemului I

Utilizare Internet

Laborator - Configurarea Rutelor IPv4 Statice și Implicite Topologie Tabela de Adresare Echipame nt Interfață Adresă IP Masca de subreţea Default Gate

PowerPoint-Präsentation

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Informație și comunicare

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - CarteC.doc

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

OPERATII DE PRELUCRAREA IMAGINILOR 1

Microsoft Word - Curs_08.doc

DISPOZITIVE DE INTRARE

PowerPoint Presentation

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Curs 6: Clasificarea surselor de informatii - Clasificarea Bayes Naiva. Modelul Bernoulli

Transcriere:

Laborator 6 - Paradigme de Programare Utilizarea POO în Python După cum am discutat limbajul Python suportă patru tipuri de paradigme de programare. Dintre ele cele mai importante sunt cea orientată obiect și cea funcțională. Deoarece aspectele specifice programării funcționale vor fi tratate în viitor s-a ales pentru acest laborator prezentarea abilităților limbajului cu privire la programarea orientată obiect Câteva observații legate de mediul de dezvoltare PyCharm Pentru laborator vom utiliza versiunea gratuită Community care se ia de la același producător ca și Intellij NU utilizați NICIODATĂ copy/paste din orice sursă deoarece zăpăcește analizorul sintactic integrat al intelisense-ului și ca începători va fi mai dificil de pus codul într-o manieră funcțională în concordanță cu logica dorită a programului Pycharm are un detector automat de sintaxă și ne oferă o facilitate deosebită pentru Python și anume ne marchează explicit prin linii verticale fine buclele și blocurile asociate unei instrucțiuni Vom începe prin a reaminti o serie de noțiuni minimale după cum urmează Tipurile de variabile sunt inițializate automat ca la Kotlin cu care se aseamănă parțial Python folosește spațierea (tab-ul nu mai este recomandat dar pycharm îl suportă) pe post de demarcare bloc de instrucțiuni asociat Toate clasele din Python sunt derivate din clasa mamă object. Dacă nu vom specifica altă clasă de bază clasa nou creată va fi derivată din object Două surse bune cu privire la limbaj se găsesc la https://www.python.org/doc/ și la https://docs.python.org/3/ self este echivalentul lui this O variabilă simplă se citește cu val=input( dati valoarea ) O variabilă se afișează cu print( \n val= +str(val)) Conversiile de tip sunt realizate cu metode ajutătoare Comentariile încep cu # Scheletul unei funcții main(): def main(): #nu este obligatorie în pycharm if name == " main ": main() Când se utilizează o interfață metodele din clasă au un apel la pass

Tratarea parametrilor din linia de comandă se bazează pe funcții din biblioteca sys, Fiind limbaj interpretat primul parametru se află în sys.argv[1]: Un exemplu de clasă utilizată în crearea unei liste este prezentat mai jos: class ContactList(list): def search(self, name): matching_contacts = [] for contact in self: if name in contact.name: matching_contacts.append(contact) return matching_contacts class Contact: all_contacts = ContactList() def init (self, name, email): #constructor self.name = name self.email = email self.all_contacts.append(self) UN exemplu de inițializare a obiectului: C1 = Contact("Jonny Bravo", "jb@mamashome.net") Un exemplu de apel super: class Friend(Contact): def init (self, name, email, phone): super(). init (name, email) self.phone = phone Implementați o aplicație pornind de la acest exemplu Și un exemplu simplu de moștenire:

class BaseClass: num_base_calls = 0 print("apell metoda din Base Class") self.num_base_calls += 1 class LeftSubclass(BaseClass): num_left_calls = 0 print("apel metoda din Left Subclass") self.num_left_calls += 1 class RightSubclass(BaseClass): num_right_calls = 0 print("apel metoda din Right Subclass") self.num_right_calls += 1 class Subclass(LeftSubclass, RightSubclass): Și utilizarea: num_sub_calls = 0 print("apel metoda din subclasă") self.num_sub_calls += 1 s = Subclass() s.call_me() print(s.num_sub_calls,s.num_left_calls,s.num_right_calls,s.num_base_calls) Înlocuiți apelurile la super() cu apelurile explicite ale funcțiilor din clasele bază de exemplu LeftSubclass.call_me(self) și reexecutați programul. Ce se întâmplă? În sfârșit prezentăm și un exemplu simplu de polimorfism: class AudioFile: def init (self, filename): if not filename.endswith(self.ext): raise Exception("Format nesuportat") self.filename = filename class MP3File(AudioFile): ext = "mp3" print("se canta {} un mp3".format(self.filename)) class WavFile(AudioFile): ext = "wav" print("se canta {} un wav".format(self.filename))

class OggFile(AudioFile): ext = "ogg" print("se canta {} un ogg".format(self.filename)) class FlacFile: def init (self, filename): if not filename.endswith(".flac"): raise Exception("Format necunoscut") self.filename = filename print("se canta {} un flac".format(self.filename)) Pentru acest exemplu aveți ca sarcină de laborator să elaborați pe hârtie diagrama de clase și să dezvoltați un program. Și o utilizare a unui obiect al claselor: ogg = OggFile("myfile.ogg") ogg.play() Să analizăm în continuare următoarea problemă. Trebuie modelate două categorii de elemente constitutive de granularitate mare ale corpului uman și anume mușchii și nervii. Alegerea a fost din rațiuni strict didactice și nu trebuie luată în considerare din punct de vedere al medicinei. Gruparea a fost bazată pe idea de fibre din corpul uman. Chiar dacă fibrele nervoase sunt utilizate și în controlul masei musculare ele sunt una din componentele similare cu magistralele unui sistem de calcul. Ca de obicei se va porni de la această diagramă și (vai, vai :)) utilizând creion hârtie și radieră se vor face mai întâi modificările conceptuale și abia apoi se va trece la implementarea codului. Studenții își pot alege să modifice proiectul inițial și apoi să implementeze modificările (câte una din a,b,c) din lista de mai jos: A. Cum se modifică diagrama de clase și codul, dacă dorim să adăugăm: mușchii biceps de la cele două mâini (de ex.: scop mâna stângă: {"locomotor", "încordare braț stâng"} mușchii triceps de la cele două mâini (de ex.: scop mâna stângă: {"locomotor", "relaxare braț stâng"} mușchii piciorului (de ex. scop gamba stângă: {"locomotor", "mișcare gleznă stângă"} Trunchiuri nervoase specifice coloanei

B. Calculați: masa musculară a tuturor mușchilor prezenți lungimea tuturor nervilor prezenți C. Afișați doar: mușchii care au ca scop, printre altele funcția locomotorie Fibrele nervoase din zona coloanei Se acceptă și sugestii de alte probleme (tot sub formă de UML inițial) care vor folosi moștenirea multiplă Un exemplu de ieșire cu câteva valori aleatorii Masa musculara a muschilor [Biceps Stang] = 0.49429999999999996 Masa musculara a muschilor [Biceps Drept] = 0.3666 Masa musculara a muschilor [Triceps Stang] = 0.4447 Masa musculara a muschilor [Triceps Drept] = 0.4915999999999999 Masa musculara a muschilor [Gamba Stanga] = 0.43329999999999996 Masa musculara a muschilor [Gamba Dreapta] = 0.4665 Masa musculara a muschilor [Stomac] = 1.2517999999999996 masa totala a muschilor = 5.0489 Lungimea sistemului nervos [Emisfera Stanga] = 1439.1999999999998 Lungimea sistemului nervos [Emisfera Dreapta] = 1672.8 Lungimea sistemului nervos [Cerebel] = 1088.5 Lungimea sistemului nervos [Maduva] = 1210.9 Lungimea axonilor din sistemul nervos = 5411.4 Urmatorii muschi au functie locomotorie: Biceps Stang ['locomotor', 'incordare'] Biceps Drept ['locomotor', 'incordare'] Triceps Stang ['locomotor', 'relaxare'] Triceps Drept ['locomotor', 'relaxare'] Gamba Stanga ['locomotor', 'incordare'] Gamba Dreapta ['locomotor', 'incordare'] Realizați o aplicație care să identifice dintr-un director dat ca parametru, categoriile de fișiere precizate mai jos, folosind frecventa caracterelor care apar în acestea: text ASCII/UTF8 (frecvențe mari pentru caractere în limitele {9,10,13,32 127} și frecvențe foarte mici pentru caractere în limitele {0 8,11,12,14,15 31, 128 255}) text UNICODE/UTF16 (caracterul 0 apare în cel puțin 30% din tot textul) binar (frecvențele sunt distribuite oarecum uniform pe tot domeniul {0 255}) Fig. 1: Diagrama de clase Implementați diagrama de clase și utilizați-o pentru a rezolva următoarea problema:

Creați un script care va parcurge recursiv un director primit ca parametru și la final va afișa căile absolute ale: fișierelor XML ASCII fișierelor UNICODE fișierelor BMP + dimensiunea (width,height) și numărul de bits per pixel Datorită mecanismului de scanare, ar trebui să puteți identifica tipul fișierului, indiferent de extensia acestuia. Cod ajutător pentru problema 2 Pentru accesul la sistemul de fisiere folosim libraria os: for root, subdirs, files in os.walk(rootdir): for file in os.listdir(root): filepath = os.path.join(root, file) if os.path.isdir(filepath): pass else: f = open (filepath, 'rb') #deschide fișierul spre acces binar try: content = f.read() #în content se va depune o listă de octeți finally: f.close()