Fondamenti di Programmazione ad Oggetti e Architettura dei Computer
Classificato in Informatica
Scritto il in
italiano con una dimensione di 8,7 KB
Programmazione Orientata agli Oggetti (OOP)
Oggetto: Un insieme di strutture complesse di dati e programmi che fanno parte di un'organizzazione. Un oggetto dati non è semplice, ma contiene al suo interno una serie di componenti strutturati.
Classe
Le classi sono dichiarazioni di oggetti; potrebbero anche essere definite come astrazioni di oggetti. La definizione di un oggetto è la classe. Una classe è una struttura statica che descrive un comportamento comune e degli attributi. La sua formalizzazione avviene attraverso una struttura dati, compresi i dati e le funzioni, chiamate metodi. I metodi definiscono i comportamenti. Ogni classe ha due metodi fondamentali:
- Costruttore: viene chiamato quando la classe inizia a prendere il suo posto nella memoria, cioè quando comincia a essere usata o istanziata. È responsabile dell'inizializzazione dei valori e può anche chiamare costruttori di altre classi.
- Distruttore (Destroyer): viene chiamato alla fine della vita dell'istanza della classe per liberare le risorse.
Gli oggetti sono istanze di una classe qualsiasi. Quando ne creiamo una copia, dobbiamo specificare la classe da cui crearla. Questa azione di creazione di un oggetto da una classe è detta istanza.
Caratteristiche degli Oggetti
- Identità: permette di differenziare tra un'istanza e un'altra.
- Comportamento: consente di svolgere compiti specifici comuni a tutti gli oggetti della stessa classe.
- Stato: determinato attraverso alcune informazioni memorizzate, che possono essere fisse o variabili.
Concetti Fondamentali dell'OOP
- Astrazione dei dati: permette di non preoccuparsi dei dettagli non essenziali. È disponibile in molti linguaggi di programmazione (es. strutture dati, tipi di dati, procedure e funzioni). È la capacità di un componente di compiere le sue funzioni indipendentemente dal contesto in cui viene utilizzato.
- Incapsulamento: questa è la caratteristica che denota la capacità dell'oggetto di rispondere alle richieste attraverso i propri metodi senza esporre i mezzi utilizzati per fornire tali risultati.
Esistono alcuni attributi che possono essere comuni a tutte le istanze di una classe, definiti come statici. I metodi statici definiti in una classe possono essere richiamati senza creare un'istanza della classe, accedendo solo ai dati statici. La chiamata a un metodo statico è generalmente comoda, specialmente nei compiti di inizializzazione.
Ereditarietà
Si tratta della capacità di una classe di ereditare variabili e metodi da varie sottoclassi (la classe che viene ereditata è chiamata superclasse o classe genitore). Ciò significa che una sottoclasse, oltre ai propri attributi e metodi, incorpora quelli ereditati dalla superclasse, creando così una gerarchia di eredità.
Polimorfismo
Indica la possibilità di definire operazioni diverse con lo stesso nome, differenziandole solo per i parametri immessi. A seconda dell'oggetto presentato come parametro di input, vengono eseguite le operazioni corrispondenti. Il termine polimorfismo definisce anche la capacità di creare più oggetti utilizzando lo stesso tipo di base.
Le Classi Astratte
I metodi astratti sono dichiarati ma non implementati. Se è presente un metodo astratto, la classe deve essere dichiarata come astratta e, in quanto tale, non può essere istanziata. Viene utilizzata per definire concetti incompleti che devono essere completati nelle sottoclassi.
Architettura di un PC
Hardware
Nome dato ai componenti fisici del computer, la cui funzionalità non può essere modificata facilmente. Un computer è costituito da 4 unità di base:
- Modulo di ingresso: il PC ha bisogno di ricevere dati e istruzioni per risolvere qualsiasi problema. L'unità di input è costituita da uno o più dispositivi.
- CPU (Central Processing Unit): dispositivo principale per l'elaborazione elettronica dei dati. La CPU interpreta le istruzioni di un programma e le esegue una ad una. Si compone di 3 unità principali:
- Unità di controllo: controlla e gestisce il trasferimento di dati e istruzioni tra le differenti unità.
- Unità Logico-Aritmetica (ALU): esegue le operazioni aritmetiche (+, -, *, /), logiche (AND, OR, NOT) e relazionali (>, <).
- Registri: utilizzati per memorizzare temporaneamente i dati e le istruzioni in uso.
- Unità di memoria: utilizzata per memorizzare programmi e dati.
- Unità di output: usata per stampare e visualizzare i risultati memorizzati nell'unità di memoria.
Rappresentazione Interna dei Dati
- Bit & Byte: i dati sul PC sono rappresentati utilizzando solo i simboli 0 e 1, chiamati bit. Un insieme di 8 bit è un byte.
- Software: i programmi dirigono il funzionamento dell'hardware per la soluzione di un problema; la loro funzionalità è facilmente modificabile.
- Sistema Operativo (SO): insieme di programmi incaricati di gestire tutte le risorse del computer, fornendo un'interfaccia tra programmi e hardware. Il SO ha un peso rilevante nella gestione della memoria di massa e dell'organizzazione, avvalendosi di due concetti fondamentali:
- Directory: entità logiche che permettono un'organizzazione strutturata e gerarchica delle informazioni. Non contengono informazioni in sé, ma sono usate per fini organizzativi.
- File: entità logiche contenenti informazioni di diversa natura.
- Applicazioni: programmi o insiemi di programmi che eseguono compiti specifici come database, calcolo scientifico, elaborazione di testi, ecc.
Sistemi di Sviluppo
Insiemi di programmi destinati alla generazione di applicazioni. Possono essere classificati in diversi modi:
1. Secondo il livello di astrazione
- Linguaggi a basso livello: linguaggi in cui il programmatore deve specificare le attività da eseguire da una prospettiva molto vicina all'hardware.
- Linguaggi ad alto livello: il programmatore manipola entità astratte senza farsi coinvolgere nei dettagli di implementazione interna.
2. Secondo le metodologie
- Linguaggi imperativi: il programmatore deve specificare in dettaglio il flusso del programma.
- Linguaggi dichiarativi: il programmatore pone l'accento sulla definizione del problema piuttosto che sulla sua soluzione, che risiede nei meccanismi del linguaggio stesso.
- Linguaggi orientati agli oggetti: il programmatore definisce entità caratterizzate da uno stato interno e meccanismi per modificarlo, facilitando la modellazione di entità fisiche.
- Linguaggi misti: consentono al programmatore di mescolare diverse metodologie di programmazione.
3. In base all'esecuzione del programma
- Interpreti: vi è un processo ulteriore che traduce le istruzioni del programma in linguaggio macchina durante l'esecuzione stessa.
- Compilatori: il processo di traduzione in codice macchina viene eseguito prima dell'esecuzione. Questo aumenta considerevolmente l'efficienza a scapito della flessibilità durante lo sviluppo.
- Ambiente di programmazione: ambiente ricco che facilita il compito di sviluppo, debug e test di un programma.
Linguaggio C
Svantaggi
- Manca di istruzioni native per l'input/output (E/S) e per la manipolazione delle stringhe, delegando il lavoro a routine di libreria, con conseguente potenziale perdita di portabilità.
- L'eccessiva libertà nella scrittura dei programmi può portare a errori sintatticamente corretti ma difficili da individuare a colpo d'occhio.
- La precedenza degli operatori a volte rende le espressioni dei piccoli rompicapo.
Caratteristiche
- Programmazione strutturata.
- Economia di espressione.
- Codifica ad alto e basso livello contemporaneamente.
- Sostituisce vantaggiosamente la programmazione in Assembler.
- Utilizzo naturale delle funzioni primitive del sistema.
- Non è orientato a uno specifico settore.
- Produzione di codice oggetto altamente ottimizzato.