# POO TypeScript
# Que rodea la POO ?
- Clases
- Abstraccion de datos
- Encapsulacion
- Informacion privada
- Herencia
- Polimorfismo
# Herencia
Nota
Las clases heredan los metodos y propiedades de la clase padre.
Deben estar marcados como public
o protected
Se utiliza el metodo super()
para obtener las propiedades del padre.
class Curso = {
constructor(protected id: number, protected nombre: string){
}
nuevoCurso(curso: Curso): void{
this.cursos.push(curso)
}
}
class Escuela = {
constructor(protected _id: number, protected _nombre: string, protected cursos: Curso){
}
}
Clase que Hereda
class EscuelaProgamacion extend Escuela = {
constructor(nombre: string, paginaWeb: string){
super(nombre)
}
}
Instanciando la clase y utilizando los metodos de las clases heredadas
let escuela: EscuelaProgamacion;
escuela = new EscuelaProgamacion('Eprog', 'eprog.com');
console.log(escuela.nombre); // Get de la clase padre
# Simulación de un banco
Dentro de una carpeta llamada modelos creamos las diferentes clases
Clase Direccion --> direccion.ts
export class Direccion {
constructor(
private pais: string,
private ciudad: string,
private calle: string
) {}
}
Clase Cuenta --> cuenta.ts
export abstract class Cuenta {
constructor(
private numero: number,
private saldo: number,
private modena: string
) {}
}
Clase Caja de Ahorro --> caja-ahorro.ts
import { Cuenta } from './cuenta';
export class CajaDeAhorro extends Cuenta {
constructor(
private nombre: string,
private saldo: number,
private moneda: string,
private interes: number
) {
super(nombre, saldo, moneda); // Cuenta.constructor()
}
public aplicarInteres(): void {
console.log(`Aplicando Interes: ${this.interes}`);
}
}
Clase Cuenta Corriente --> cuenta-corriente.ts
import { Cuenta } from './cuenta';
export class CuentaCorriente extends Cuenta {
constructor(
private nombre: string,
private saldo: number,
private moneda: string,
private interes: number
) {
super(nombre, saldo, moneda); // Cuenta.constructor()
}
public aplicarInteres(): void {
console.log(`Aplicando Interes: ${this.interes}`);
}
}
Clase Cliente --> cliente.ts
import { Cuenta } from './cuenta';
import { Direccion } from './direccion';
export class Cliente {
private codigo: number;
private nombre: string;
private direccion: Direccion;
private cuenta: Cuenta[];
constructor(codigo: number, nombre: string, direccion: Direccion) {
this.codigo = codigo;
this.nombre = nombre;
this.direccion = direccion;
this.cuenta = [];
}
agregarCuenta(cuenta: Cuenta) {
this.cuenta.push(cuenta);
}
}
INDEX --> index.ts
Creamos un archivo index donde exportaremos todas las clases de la carpeta modelos
import { Cliente } from './cliente';
import { Cuenta } from './cuenta';
import { CajaDeAhorro } from './caja-ahorro';
import { CajaCorriente } from './cuenta-corriente';
import { Direccion } from './direccion';
Crear instancias en app.ts
import {
Cliente,
Cuenta,
CajaDeAhorro,
CajaCorriente,
Direccion,
} from './modelos';
// Creando un primer cliente
const direccion01 = new Direccion('España', 'Madrid', 'Camilo Jose Cela');
const cliente01 = new Cliente(1, 'Alejandro Llorente', direccion01);
const cuenta01: Cuenta, cuenta02: Cuenta;
cuenta01 = new CajaDeAhorro(100, 0, 'EU', 10);
cuenta02 = new CuentaCorriente(500, 0, 'EU', 5);
cliente01.agregarCuenta(cuenta01);
cliente01.agregarCuenta(cuenta02);