Domanda

Ho appena avuto un CS intermedia e una delle domande era:

OOD permette ADT per essere creati e utilizzati.

  • True
  • false

ho risposto falso, ma la mia risposta è stata contrassegnata come errata. Ho il sospetto che ciò che i mezzi domanda è "obiettò-oriented design può essere utilizzato per implementare tipi di dati astratti", ma se è questo che vuol dire che sembra molto maldestramente formulata per me. La mia spiegazione razionale per rispondere falso era ADT sono concettuali ed esistono al di fuori di un particolare paradigma di programmazione, in modo da "creazione" di un ADT è puramente un esercizio teorico.

A me sembra che la questione è analoga a dire "OOD permette algoritmi da creare". È possibile utilizzare OOD nella realizzazione di un algoritmo, ma non ha nulla a che fare con la sua creazione.

Sarei proprio in appello il mio marchio? Il mio professore è una specie di un idiota e ho già lo corresse su diversi altri punti per tutta la durata, quindi sto cercando di evitare gli inimicarsi se mi sbaglio.

È stato utile?

Soluzione

In primo luogo, se questa è esattamente la frase l'esame e non la vostra traduzione, è ambigua. Si potrebbe dire che OOD è un modo possibile per creare e utilizzare ADT, o che la creazione e l'utilizzo di ADT richiede OOD.

Inoltre, ADT può significare due cose: tipo di dato astratto o algebraic tipo . I due concetti sono completamente diverse, ma sono spesso confusi. Un tipo di dati algebrico è un tipo definito dalla sua struttura ricorsiva, o equivalentemente dai modi per costruire un oggetto di quel tipo. Un tipo di dato astratto è un tipo definito dalle sue proprietà, con il modo di costruire oggetti rimanendo nascosto.

La seconda interpretazione - che è necessario per OOD ADT - è sicuramente falsa. Esistono linguaggi di programmazione che non hanno alcuna orientamento dell'oggetto ma hanno ADT in un senso o l'altro o entrambi. Standard ML è un primo esempio:. Discografiche e tipo somma definizioni forniscono i tipi di dati algebrici, mentre il sistema di modulo fornisce tipi di dati astratti

La prima interpretazione - che ADT possono essere implementati con OOD - è controversa, perché dipende da una terminologia che non è standard. In linguaggi tipici che forniscono gli oggetti, è possibile costruire i tipi di dati algebrici: definire diverse implementazioni di una classe per fare un tipo di somma, e mettere più campi in una classe per fare un tipo di prodotto. Tuttavia questo non è intrinseca alla programmazione orientata agli oggetti. Per quanto riguarda i tipi di dati astratti, la maggior parte dei linguaggi orientati agli oggetti forniscono un qualche tipo di struttura astrazione nascondendo l'implementazione di una classe sotto qualche interfaccia. Tuttavia, questo non è intrinseco alla OOP:. La caratteristica fondamentale degli oggetti è l'ereditarietà, e si può avere l'eredità senza alcuna astrazione di sorta

La questione può essere fare una differenza tra progetto orientato agli oggetti e programmazione orientata agli oggetti costrutto, ma OO D è veramente sullo stesso piano ADT.

Tutto sommato questa è una domanda esame mal formulata. Il collegamento tra OOD e ADT è un argomento interessante, ma la questione non è formulata in modo significativo.

Altri suggerimenti

Tutto dipende dalla vostra definizione di "creato".

Se per creato vuoi dire "definito", allora certamente la risposta è vero. Il concetto di interfaccia in Java o linguaggi simili è un ADT. Dando un nome a certi metodi che possono essere chiamati su un tipo, si è creato un tipo di dato astratto, che può essere utilizzato per le variabili e parametri.

Se per creato vuoi dire "istanziato", allora la risposta è falsa, dal momento che non è possibile creare un'istanza di un tipo astratto. Un oggetto avrà il tipo di un ADT. Avrà il tipo di una classe che implementa un TDA.

No, non credo di avere una gamba a stare su.

Nella misura in cui non v'è alcuna ambiguità nella questione, sembra abbastanza chiaro cosa si intende. Sembra che l'affermazione è: linguaggi orientati agli oggetti consentono (abilitare, rendere possibile) di costruire (implementare, build) di un tipo di dato astratto nel codice. La risposta è "vero":. Linguaggi orientati agli oggetti standard, fare consentono di implementare e utilizzare i tipi di dati astratti nel codice

Il tuo argomento per "false" in particolare mi sembra debole. ADT non sono solo teorici: è possibile implementare un ADT nel codice, e la gente spesso fare. Per dire che sono "semplicemente" concettuale è quello di perdere il punto. Se ho detto "Un martello mi permette di costruire una sedia inchiodando insieme pezzi di legno", e si risponde "falso: l'idea di una sedia è solo concettuale", saremmo tutti ti guardano strano. Penso lo stesso vale qui.

progettazione orientata agli oggetti è rilevante per ADT. Nella misura in cui si pensa di progettazione orientata agli oggetti come suggerire a costruire oggetti incapsulati, quindi che l'incapsulamento in pratica significa che si sta costruendo un ADT.

Non lo consiglio attraente il voto su questa questione. Salva i tuoi appelli per le situazioni in cui si ha un caso più ragionevole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top