Pregunta

Acabo de tener un CS a mitad de período y una de las preguntas fue:

OOD permite que se creen y usen ADTS.

  • Verdadero
  • Falso

Respondí falso, pero mi respuesta fue marcada como incorrecta. Sospecho que lo que significa la pregunta es "el diseño orientado objetado se puede usar para implementar tipos de datos abstractos", pero si eso es lo que significa que me parece muy convincente. Mi justificación para responder falsos fue que los ADT son conceptuales y existen fuera de cualquier paradigma de programación en particular, por lo que la "creación" de un ADT es un ejercicio teórico.

Para mí parece que la pregunta es análoga a decir "OOD permite que se creen algoritmos". Puede usar OOD en la implementación de un algoritmo, pero no tiene nada que ver con su creación.

¿Tendría razón al apelar mi marca? Mi profesor es una especie de idiota y ya lo he corregido en varios otros puntos a lo largo del período, así que estoy tratando de evitar antagonizarlo si me equivoco.

¿Fue útil?

Solución

Primero, si esta es exactamente la oración en el examen y no en su traducción, es ambiguo. Podría significar que OOD es una forma posible de crear y usar ADT, o que la creación y el uso de ADTS requiere OOD.

Además, ADT puede significar dos cosas: Tipo de datos abstracto o Tipo de datos algebraicos. Los dos conceptos son completamente diferentes pero a menudo están confundidos. Un tipo de datos algebraicos es un tipo que se define por su estructura recursiva, o de manera equivalente por las formas de construir un objeto de ese tipo. Un tipo de datos abstractos es un tipo que se define por sus propiedades, con la forma de construir objetos ocultos.

La segunda interpretación, que necesita OOD para ADTS, es definitivamente falsa. Hay lenguajes de programación que no tienen orientación de objetos en absoluto pero tienen ADT en un sentido o en el otro o ambos. El ML estándar es un excelente ejemplo: las definiciones de tipo de registro y de suma proporcionan tipos de datos algebraicos, mientras que el sistema de módulos proporciona tipos de datos abstractos.

La primera interpretación, que los ADT se pueden implementar con OOD, es polémico, porque depende de la terminología que no sea estándar. En los idiomas típicos que proporcionan objetos, puede crear tipos de datos algebraicos: definir varias implementaciones de una clase para hacer un tipo de suma y colocar múltiples campos en una clase para hacer un tipo de producto. Sin embargo, esto no es intrínseco a la programación orientada a objetos. Con respecto a los tipos de datos abstractos, la mayoría de los idiomas orientados a objetos proporcionan algún tipo de instalación de abstracción al ocultar la implementación de una clase bajo alguna interfaz. Sin embargo, esto no es intrínseco para OOP: la característica clave de los objetos es la herencia, y puede tener herencia sin ninguna abstracción.

La pregunta puede ser hacer una diferencia entre el diseño orientado a objetos y la construcción de programación orientada a objetos, pero OOD no está realmente en el mismo avión que los ADT.

En general, esto es una pregunta de examen mal redactada. La conexión entre OOD y ADTS es un tema interesante, pero la pregunta no se redacta de manera significativa.

Otros consejos

Todo depende de su definición de "creado".

Si por creado te refieres a "definido", entonces ciertamente la respuesta es verdadera. El concepto de una interfaz en Java o idiomas similares es un ADT. Al dar un nombre a ciertos métodos que se pueden llamar a un tipo, ha creado un tipo de datos abstractos, que puede usar para variables y parámetros.

Si por creado quiere decir "instanciado", entonces la respuesta es falsa, ya que no puede instanciar un tipo de abstracto. Un objeto tendrá el tipo de ADT. Tendrá el tipo de clase que implementa un ADT.

No, no creo que tengas una pierna en la que pararse.

En la medida en que hay alguna ambigüedad en la pregunta, me parece bastante claro lo que se entiende. Parece que la afirmación es: los lenguajes orientados a objetos lo permiten (habilitar, hacer posible) que construya (implementar, construir) un tipo de datos abstracto en su código. La respuesta a eso es "verdadera": los lenguajes estándar orientados a objetos le permiten implementar y usar tipos de datos abstractos en su código.

Tu argumento para "falso" en particular me parece débil. Los ADT no son meramente teóricos: puede implementar un ADT en su código, y las personas a menudo lo hacen. Decir que son "simplemente" conceptuales es perder el punto. Si dije "un martillo me permite construir una silla clavando piezas de madera", y usted respondió "Falso: la noción de una silla es meramente conceptual", todos te miraríamos gracioso. Pienso en lo mismo se aplica aquí.

El diseño orientado a objetos es relevante para los ADT. En la medida en que piense en el diseño orientado a objetos como recomendando que cree objetos encapsulados, entonces esa encapsulación básicamente significa que está construyendo un ADT.

No recomendaría apelar su calificación en esta pregunta. Guarde sus apelaciones para situaciones en las que tenga un caso más razonable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top