Wrong Abstraction Level
Nivel de Abstracción Incorrecto
G5: Every concept in a base class should be at the same level of abstraction. High-level policy (authentication, routing) must not live in the same layer as low-level details (byte buffers, file handles). When you mix levels, neither layer is easy to read or reuse.
G5: Cada concepto en una clase base debe estar al mismo nivel de abstracción. La política de alto nivel (autenticación, enrutamiento) no debe vivir en la misma capa que los detalles de bajo nivel (buffers de bytes, manejadores de archivos). Cuando mezclas niveles, ninguna capa es fácil de leer o reutilizar.
Base Classes Must Not Know Their Derivatives
Las Clases Base No Deben Conocer a Sus Derivadas
G6: A base class that inspects type(self) or uses instanceof on its own children is not a base class anymore — it is a god object pretending to be a hierarchy. Knowledge flows downward: base → derived. The moment it flows upward, the abstraction is broken. Refactor: define an abstract method in the base class and let each derived class implement it.
G6: Una clase base que inspecciona type(self) o usa instanceof sobre sus propios hijos ya no es una clase base — es un objeto dios que pretende ser una jerarquía. El conocimiento fluye hacia abajo: base → derivada. En el momento en que fluye hacia arriba, la abstracción está rota. Refactoriza: define un método abstracto en la clase base y deja que cada clase derivada lo implemente.
✏️
Code Challenge
Desafío de Código
Refactor the Shape base class to remove the type-switch.
Refactoriza la clase base Shape para eliminar el switch de tipos.
💡 Key takeaway
Base classes define contracts. Derived classes own the implementation. Never reverse that flow.
Las clases base definen contratos. Las clases derivadas poseen la implementación. Nunca inviertas ese flujo.