Chiarimenti sulla OOP

di il
5 risposte

Chiarimenti sulla OOP

Salve a tutti!!
Non riesco a cogliere sino in fondo la differenza o meglio il vantaggio del paradigma OOP
rispetto a quello modulare.
Cioè anche quando utilizzavo il C erano presenti concetti quali astrazione e modularità o in generale
la scomposizione in sottoproblemi ed inoltre anche in C vi era l'implementazione dei tipi di dato astratti(ADT)
che costituivano una rappresentazione per così dire concreta delle astrazioni concepite dal progettista.
Utilizzando l'approccio della programmazione ad oggetti (usando java come linguaggio)si usa l'incapsulamento cioè far
uso di oggetti ossia entità che hanno al loro interno sia variabili che metodi(funzioni).Ma non è possibile fare la stessa cosa con le strutture dati astratte del C?
Da poco ho ho iniziato anche ad affrontare i concetti di ereditarietà e polimorfismo ed è qui che mi sembrano facciano davvero la differenza
tra programmare ad oggetti ed la programmazione imperativa.Però sono sempre col pensiero che sia possibile effettuare le stesse cose anche col C...
Non so bene come spiegarmi.
Ancora un dubbio:creare (definire) una classe e successivamente istanziare un oggetto di quella determinata classe vuol dire creare uno specifico 'tipo di dato',cioè il tipo di dato corrispondente a quella classe,giusto?
Aspetto vostre delucidazioni grazie.

5 Risposte

  • Re: Chiarimenti sulla OOP

    Perché fare tutto in C quando puoi fare tutto in assembly? Per questioni di tempo. Prova a fare un socket TCP in Java e poi fallo in C
  • Re: Chiarimenti sulla OOP

    SuperNewbie ha scritto:


    Non riesco a cogliere sino in fondo la differenza o meglio il vantaggio del paradigma OOP
    rispetto a quello modulare. [...]
    Ma non è possibile fare la stessa cosa con le strutture dati astratte del C?
    Si può fare tutto con tutto, ovviamente, tant'è che buona parte del codice OOP viene tradotto in linguaggio macchina, che non lo è, quindi non è dal punto di vista di ciò che si può far fare a un computer la differenza sostanziale.

    La diversità risiede nel fatto che, generalmente, usiamo linguaggi di alto livello per la programmazione, e le architetture basate su approcci orientati agli oggetti sono più semplici da manutenere - da parte dello sviluppatore - rispetto a quelli modulari, danno maggior robustezza alle strutture dati, consentono di scrivere meno codice, di applicare design pattern e altri paradigmi facili da estire, ovviamente tutto questo quando parliamo di una base di codice congrua, che abbia una certa complessità anche minimale.

    Se continuerai ad approfondire i concetti della OOP e riuscirai a padroneggiarli come si deve, ne capirai da solo i vantaggi al momento opportuno.

    Ciao!
  • Re: Chiarimenti sulla OOP

    SuperNewbie ha scritto:


    si usa l'incapsulamento cioè far uso di oggetti ossia entità che hanno al loro interno sia variabili che metodi(funzioni).
    Quando si parla di incapsulamento (in OOP) si possono intendere due cose:
    1) il fatto di poter avere una entità (oggetto) che incapsula al suo interno dati E funzionalità (è quanto hai appena detto)
    2) il fatto di poter "nascondere" o comunque limitare l'accesso ai dati contenuti nell'oggetto

    Generalmente si tende a pensare al secondo da solo oppure al secondo in combinazione con il primo. Dipende molto dal contesto/linguaggio.

    SuperNewbie ha scritto:


    Ma non è possibile fare la stessa cosa con le strutture dati astratte del C?
    No, non in senso completo/pulito come i linguaggi che sono veramente ad oggetti. Si può tentare di sfruttare delle struct che contengono dati E puntatori a funzione ma a quest'ultime dovresti comunque passare l'indirizzo della struttura (concettualmente equivalente al "this" di Java). Non è comunque proprio un incapsulamento .....

    SuperNewbie ha scritto:


    i concetti di ereditarietà e polimorfismo ed è qui che mi sembrano facciano davvero la differenza
    tra programmare ad oggetti ed la programmazione imperativa.
    La programmazione "imperativa" non la puoi confrontare/contrapporre alla programmazione ad oggetti, sono due concetti diversi. La programmazione "imperativa" la puoi fare in qualunque linguaggio che ti permette di scrivere istruzioni/comandi/direttive (termine a seconda del linguaggio) per indicare esattamente COME vuoi fare le cose e con QUALE sequenza.
    La programmazione imperativa si contrappone alla programmazione "dichiarativa" (SQL è un linguaggio dichiarativo).

    SuperNewbie ha scritto:


    Ancora un dubbio:creare (definire) una classe e successivamente istanziare un oggetto di quella determinata classe vuol dire creare uno specifico 'tipo di dato',cioè il tipo di dato corrispondente a quella classe,giusto?
    Un nuovo tipo di dato lo ottieni già solo con il fatto di aver scritto e definito una classe, che rappresenta e descrive la "forma" che tutti gli oggetti di quella classe avranno.
  • Re: Chiarimenti sulla OOP

    Ha tutto un fondamento storico, che bisognerebbe conoscere.
    OO nasce come uno dei vari tentativi anni 70-80-90 di inventare qualcosa di meglio.
    Con scarsi risultati.
    Essenzialmente in C certe regole puoi seguirle, mentre in C++ poggiano sul compilatore.
    Java ha una storia a parte, poco a che vedere con OO e molto con le JVM e garbage collector (sempre tentativi anni 90).
    Insomma qui ci andrebbe spiegone titanico
  • Re: Chiarimenti sulla OOP

    Aggiungo nota di colore.
    le primissime versioni di C++ venivano trasformate in C dal relativo "compilatore" (preprocessore)
    E poi compilato come C.
Devi accedere o registrarti per scrivere nel forum
5 risposte