Informatica 3 LEZIONE 1: Introduzione • Modulo 1: Introduzione al corso • Modulo 2: Introduzione ai linguaggi di programmazione Politecnico di Milano - Prof. Sara Comai 1 Informatica 3 Lezione 1- Modulo 1 Introduzione al corso Politecnico di Milano - Prof. Sara Comai 2 Introduzione • Corso di Informatica 3 suddiviso in 2 parti: concetti e problematiche dei linguaggi di programmazione algoritmi e strutture di dati Politecnico di Milano - Prof. Sara Comai 3 Concetti di linguaggi di programmazione • Concetti di linguaggi di programmazione – – – – – Sintassi e semantica Tipi di dati Strutturazione della computazione Programmazione orientata agli oggetti Linguaggi di programmazione funzionali Politecnico di Milano - Prof. Sara Comai 4 Algoritmi e strutture di dati • Algoritmi e strutture di dati: – – – – – – – – Analisi degli algoritmi Liste, code e pile Alberi binari e alberi generici Grafi Strutture di dati avanzate Algoritmi di ordinamento Algoritmi di ricerca Progettazione di macchine a stati e Statecharts Politecnico di Milano - Prof. Sara Comai 5 Linguaggio di programmazione • Linguaggio di programmazione adottato: C++ • Revisione critica delle caratteristiche del linguaggio • Introduzione di nuovi concetti: – – – – ereditarietà polimorfismo classi astratte e funzioni virtuali template Politecnico di Milano - Prof. Sara Comai 6 Informatica 3 Lezione 1- Modulo 2 Introduzione ai linguaggi di programmazione Politecnico di Milano - Prof. Sara Comai 7 Introduzione • Linguaggi di programmazione – Strumento per scrivere software • Esempi di influenza (reciproca) tra LP e altri aspetti dello sviluppo SW – processo di sviluppo del software – ambienti di sviluppo – metodologie di progettazione – Evoluzione dei concetti dei linguaggi programmazione Politecnico di Milano - Prof. Sara Comai 8 Linguaggi e processo di sviluppo del software Analisi dei requisiti e specifica Progettazione del software Implementazione (codifica) Linguaggi di programmazione Verifica e validazione Manutenzione Politecnico di Milano - Prof. Sara Comai 9 Linguaggi e ambienti di sviluppo del software • Per supportare tutte le fasi di sviluppo del software: Strumenti CASE (Computer-Aided Software Engineering) che integrano – editor – compilatori – simulatori – interpreti – linker – strumenti di debugging Politecnico di Milano - Prof. Sara Comai 10 Linguaggi e metodi di progettazione • Esempi di metodi di progettazione: – top-down: scomposizione del sistema in moduli – orientata agli oggetti: scomposizione del sistema in classi di oggetti – ... • Linguaggi diversi supportano metodi di progettazione diversi – lo stile di programmazione indotto dal linguaggio prende il nome di PARADIGMA DI PROGRAMMAZIONE Politecnico di Milano - Prof. Sara Comai 11 Paradigmi dei linguaggi • Programmazione procedurale – programmi decomposti in passi di computazione – unità di modularizzazione: procedure • Programmazione funzionale – computazione di valori attraverso espressioni e funzioni – elementi di base: funzioni • Programmazione basata su tipi di dati astratti – unità di modularizzazione: tipo di dato astratto (ADT) • Programmazione basata su moduli – unità di modularizzazione: gruppo di entità (variabili, procedure, funzioni, tipi) Politecnico di Milano - Prof. Sara Comai 12 Paradigmi dei linguaggi • Programmazione orientata agli oggetti – unità di modularizzazione: classi (organizzate in gerarchie) – moduli istanziati a tempo di esecuzione • Programmazione generica – moduli generici che si possono istanziare a tempo di compilazione o esecuzione • Programmazione dichiarativa – descrizione dichiarativa del problema (specifica) Politecnico di Milano - Prof. Sara Comai 13 Linguaggi e architettura del calcolatore • Architettura di von Neumann I/O Memoria CPU fetch execute store • Linguaggi di von Neumann (o imperativi o basati su stati o basati su istruzioni): astrazione della macchina di von Neumann – esecuzione sequenziale delle istruzioni che modifica lo stato della computazione (variabili) Politecnico di Milano - Prof. Sara Comai 14 Paradigmi dei linguaggi Linguaggi di programmazione Linguaggi di Von Neumann (Procedurali, operazionali, ...) Linguaggi non di Von Neumann Linguaggi funzionali (LISP, ML) Linguaggi logici (PROLOG) Politecnico di Milano - Prof. Sara Comai 15 Qualità dei linguaggi di programmazione • Il software deve essere – affidabile • • • • • Semplicità di scrittura Leggibilità Semplicità di apprendimento Sicurezza Robustezza – manutenibile • fattorizzazione • località delle modifiche – eseguibile in modo efficiente Politecnico di Milano - Prof. Sara Comai 16 Storia del linguaggi di programmazione ‘50 ‘60 ‘70 ‘80 ‘90 – Primi linguaggi ad alto livello • FORTRAN: (applicazioni scientifiche) compilazione separata di sottoprogrammi, formule • ALGOL 60: (applicazioni scientifiche) struttura a blocchi, ricorsione, strutture dati • COBOL: (applicazioni orientate ai dati) file, I/O – Altri linguaggi non convenzionali: non efficienti ma adatti in aree di applicazione particolari • LISP: (applicazioni IA) un’unica struttura dati (lista), operazioni semplici, codice/dati uniformi (liste) • APL: (prototipazione rapida) array, molte operazioni • SNOBOL4: (manipolazione testi) stringhe, pattern matching Politecnico di Milano - Prof. Sara Comai 17 Storia del linguaggi di programmazione ‘50 ‘60 ‘70 ‘80 ‘90 • ALGOL 68: ortogonalità di concetti, specifica formale (applicazioni accademiche) • SIMULA 67: simulazione, esecuzione parallela molto semplice, primo concetto di classe (routine + strutture dati) • PASCAL: programmazione strutturata, semplicità • BASIC: interattività ‘50 ‘60 ‘70 ‘80 ‘90 – Sperimentazione con nuovi paradigmi • Linguaggi orientati agli oggetti: Smalltalk, Eiffel, ... • Linguaggi logici: PROLOG • Concorrenza e modularità: Mesa, Modula-2 Politecnico di Milano - Prof. Sara Comai 18 Storia del linguaggi di programmazione ‘50 ‘60 ‘70 ‘80 ‘90 • Linguaggi funzionali: ML, Miranda • Linguaggi orientati agli oggetti: C++, Ada, Eiffel ‘50 • • • • • ‘60 ‘70 ‘80 ‘90 Interfacce visuali: Visual Basic Parallelismo: FORTRAN 90 Linguaggi per sistemi esperti: CLIPS, OPS5 Linguaggi di script: Tcl/tk, Perl, Python Programmazione di rete: Java Politecnico di Milano - Prof. Sara Comai 19