telescopio quito que primer observatorios observatorio observaciones nocturnas museo merz llamamos historia ecuador construyo año astronómico astronomico java class java-ee abstract-class

java - quito - Clase abstracta:-ejemplo de tiempo real



observatorios astronomico quito (5)

Recientemente, en una entrevista, me hicieron una pregunta muy general "¿qué es abstracto en Java?". Di la definición y se siguió con alguna otra pregunta sobre el resumen como el método abstracto y la diferencia entre el método abstracto y el método concreto, etc. al último entrevistador me pidió que diera un ejemplo en tiempo real cuando debería usar o definir una clase como abstracta. Me confundí. Di algunos ejemplos pero él no estaba convencido.

Busqué en Google pero no encontré una solución real.

Entonces, ¿alguien me puede dar un ejemplo en tiempo real, es decir, cuando definió una clase como abstracta en su proyecto y por qué?

Gracias.


Debería poder citar al menos uno del propio JDK. Mire en el paquete java.util.collections . Hay varias clases abstractas. Debes entender completamente la interfaz, el resumen y el concreto para Map y por qué Joshua Bloch lo escribió de esa manera.


Un buen ejemplo de tiempo real encontrado desde aquí : -

Un ejemplo concreto de una clase abstracta sería una clase llamada Animal. Ves muchos animales en la vida real, pero solo hay tipos de animales. Es decir, nunca miras algo violeta y peludo y dices "eso es un animal y no hay una manera más específica de definirlo". En cambio, ves un perro o un gato o un cerdo ... todos los animales. El punto es que nunca se puede ver a un animal caminando que no sea más específicamente algo más (pato, cerdo, etc.). El Animal es la clase abstracta y el Pato / Cerdo / Gato son todas las clases que se derivan de esa clase base. Los animales pueden proporcionar una función llamada "Edad" que agrega 1 año de vida a los animales. También podría proporcionar un método abstracto llamado "Is Dead" que, cuando se le llame, le dirá si el animal ha muerto. Como IsDead es abstracto, cada animal debe implementarlo. Entonces, un Gato podría decidir que está muerto después de que cumpla los 14 años de edad, pero un Pato podría decidir que muera después de los 5 años de edad. La clase abstracta Animal proporciona la función Edad a todas las clases que se derivan de ella, pero cada una de esas clases tiene que implementar IsDead por sí mismas.

Un ejemplo de negocio:

Tengo un motor de persistencia que funcionará contra cualquier fuente de datos (XML, ASCII (delimitado y de longitud fija), varias fuentes JDBC (Oracle, SQL, ODBC, etc.) Creé una clase base abstracta para proporcionar una funcionalidad común en este persistencia, pero instanciar el "puerto" apropiado (subclase) al persistir mis objetos. (Esto hace que el desarrollo de nuevos "Puertos" sea mucho más fácil, ya que la mayor parte del trabajo se hace en las superclases, especialmente los varios JDBC; hacer persistencia pero otras cosas [como la generación de tablas], tengo que proporcionar las diversas diferencias para cada base de datos.) Los mejores ejemplos de negocios de interfaces son las colecciones. Puedo trabajar con java.util.List sin importar cómo se implementa; tener la Lista como una clase abstracta no tiene sentido porque existen diferencias fundamentales en cómo funciona una Lista de Array en comparación con una Lista Vinculada. Asimismo, Mapa y Conjunto. Y si solo estoy trabajando con un grupo de objetos y no me importa si es una Lista, Mapa o Conjunto, I ca n solo use la interfaz de Colección.


Utilizo a menudo clases abstractas en conjunción con el patrón de método de Plantilla .
En la clase de resumen principal, escribí el esqueleto del algoritmo principal y hago métodos abstractos como ganchos donde la superposición puede hacer una implementación específica; Utilicé a menudo al escribir analizador de datos (o procesador) que necesitan leer datos de un lugar diferente (archivo, base de datos u otras fuentes), tienen un paso de procesamiento similar (tal vez pequeñas diferencias) y un resultado diferente.
Este patrón se parece al patrón de estrategia, pero le da menos granularidad y puede degradarse a un código difícil de mantener si el código principal crece demasiado o si se requieren excepciones del flujo principal (estas consideraciones vinieron de mi experiencia).
Solo un pequeño ejemplo:

abstract class MainProcess { public static class Metrics { int skipped; int processed; int stored; int error; } private Metrics metrics; protected abstract Iterator<Item> readObjectsFromSource(); protected abstract boolean storeItem(Item item); protected Item processItem(Item item) { /* do something on item and return it to store, or null to skip */ return item; } public Metrics getMetrics() { return metrics; } /* Main method */ final public void process() { this.metrics = new Metrics(); Iterator<Item> items = readObjectsFromSource(); for(Item item : items) { metrics.processed++; item = processItem(item); if(null != item) { if(storeItem(item)) metrics.stored++; else metrics.error++; } else { metrics.skipped++; } } } } class ProcessFromDatabase extends MainProcess { ProcessFromDatabase(String query) { this.query = query; } protected Iterator<Item> readObjectsFromSource() { return sessionFactory.getCurrentSession().query(query).list(); } protected boolean storeItem(Item item) { return sessionFactory.getCurrentSession().saveOrUpdate(item); } }

Aquí otro ejemplo.


El mejor ejemplo de una clase abstracta es GenericServlet . GenericServlet es la clase padre de HttpServlet . Es una clase abstracta.

Al heredar ''GenericServlet'' en una clase de servlet personalizada, el método service() debe ser anulado.


Aquí, Algo sobre la clase abstracta ...

  1. La clase abstracta es una clase incompleta, por lo que no podemos instanciarla.
  2. Si los métodos son abstractos, la clase debe ser abstracta.
  3. En la clase abstracta, utilizamos el método abstracto y concreto ambos.
  4. Es ilegal definir un resumen de clase y final ambos.

Ejemplo en tiempo real--

Si desea fabricar un automóvil nuevo (WagonX) en el que se incluyan todas las propiedades de otro automóvil, como el color, el tamaño, el motor, etc., y desea agregar algunas características como modelo, base Engine en su automóvil. Luego, simplemente cree un resumen clase WagonX donde usa toda la funcionalidad predefinida como abstracta y otras funcionalidades son concretas, que usted define.
Otra subclase que extiende la clase abstracta WagonX, por defecto también accede a los métodos abstractos que se instancian en la clase abstracta. Las subclases también acceden a los métodos concretos creando el objeto de la subclase.
Para reutilizar el código, los desarrolladores usan la clase abstracta principalmente.

abstract class WagonX { public abstract void model(); public abstract void color(); public static void baseEngine() { // your logic here } public static void size() { // logic here } } class Car extends WagonX { public void model() { // logic here } public void color() { // logic here } }