Skip to content

Commit badffc6

Browse files
authored
Merge pull request mouredev#7666 from JuSeRDev/JuSeRDev
[09]-TypeScript
2 parents a46977c + 06d5ed4 commit badffc6

File tree

2 files changed

+257
-0
lines changed

2 files changed

+257
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/*
2+
* EJERCICIO:
3+
* Explora el concepto de herencia según tu lenguaje. Crea un ejemplo que
4+
* implemente una superclase Animal y un par de subclases Perro y Gato,
5+
* junto con una función que sirva para imprimir el sonido que emite cada Animal.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Implementa la jerarquía de una empresa de desarrollo formada por Empleados que
9+
* pueden ser Gerentes, Gerentes de Proyectos o Programadores.
10+
* Cada empleado tiene un identificador y un nombre.
11+
* Dependiendo de su labor, tienen propiedades y funciones exclusivas de su
12+
* actividad, y almacenan los empleados a su cargo.
13+
*/
14+
15+
namespace herencias {
16+
17+
class Animals{
18+
animal: string
19+
nombre: string
20+
21+
constructor(animal: string, nombre: string){
22+
this.animal = animal
23+
this.nombre = nombre
24+
}
25+
26+
talk():string{
27+
return `Soy un ${this.animal} y me llamo ${this.nombre} y emite un sonido no determiando`
28+
}
29+
30+
}
31+
32+
class Perro extends Animals{
33+
sonido: string
34+
35+
constructor(nombre: string, sonido: string){
36+
super("perro", nombre)
37+
this.sonido = sonido
38+
}
39+
40+
talk():string{
41+
return `Soy un ${this.animal}, me llamo ${this.nombre} y ladro, ${this.sonido}!`
42+
}
43+
}
44+
45+
class Gato extends Animals{
46+
sonido: string
47+
48+
constructor(nombre: string, sonido: string){
49+
super("gato", nombre)
50+
this.sonido = sonido
51+
}
52+
53+
talk():string{
54+
return `Soy un ${this.animal}, me llamo ${this.nombre} y maullo, ${this.sonido}!`
55+
}
56+
}
57+
58+
const loro = new Animals("loro", "theo")
59+
const perro = new Perro("Max", "guau! guau!")
60+
const gato = new Gato("Michi", "miau miau!")
61+
62+
const emitirSonido = (animal: Animals): string=>{
63+
return `${animal.talk()}`
64+
}
65+
66+
console.log(emitirSonido(loro))
67+
console.log(emitirSonido(perro))
68+
console.log(emitirSonido(gato))
69+
70+
//! EXTRA
71+
72+
class Empleado {
73+
name: string
74+
id: number
75+
empleados: Empleado[]
76+
77+
constructor(name: string, id: number) {
78+
this.name = name
79+
this.id = id
80+
this.empleados = []
81+
}
82+
83+
print(){
84+
return `Soy un el empleado ${this.name} con id: ${this.id} sin cargo asignado`
85+
}
86+
87+
add(empleado: Empleado){
88+
this.empleados.push(empleado)
89+
}
90+
91+
imprimirEmpleados(){
92+
let empleados: string[] = []
93+
for (const empleado of this.empleados) {
94+
empleados.push(empleado.name)
95+
}
96+
return empleados
97+
}
98+
99+
}
100+
101+
102+
class Gerente extends Empleado {
103+
gerenciar(){
104+
return `${this.name} esta coordinando todos los proyectos de la empresa`
105+
}
106+
107+
}
108+
109+
class GerenteDeProyectos extends Empleado {
110+
proyecto: string
111+
112+
constructor(name: string, id: number, proyecto: string){
113+
super(name, id)
114+
this.proyecto = proyecto
115+
}
116+
117+
gerenciarDeProyectos(){
118+
return `${this.name} esta coordinando su proyectos`
119+
}
120+
121+
}
122+
123+
class Programador extends Empleado {
124+
lenguage: string
125+
126+
constructor(name: string, id: number, lenguage: string){
127+
super(name, id)
128+
this.lenguage = lenguage
129+
}
130+
131+
programar(){
132+
return `${this.name} esta programando en ${this.lenguage}`
133+
}
134+
135+
add(empleado: Empleado): string{
136+
return `Un programador no tinene empleados a cargo, ${empleado.name} no se añadira`
137+
}
138+
139+
}
140+
141+
const miGerente = new Gerente("Sebastian", 1)
142+
const miGerenteDeProyectos = new GerenteDeProyectos("Laura", 2, "Proyecto 1")
143+
const miGerenteDeProyectos2 = new GerenteDeProyectos("Daniela", 3, "Proyecto 2")
144+
const miProgramador = new Programador("Juan", 4, "JavaScript")
145+
const miProgramador2 = new Programador("JuanSe", 5, "TypeScript")
146+
const miProgramador3 = new Programador("Sebas", 6, "Pyton")
147+
const miProgramador4 = new Programador("Michael", 7, "Java")
148+
149+
miGerente.add(miGerenteDeProyectos)
150+
miGerente.add(miGerenteDeProyectos2)
151+
152+
miGerenteDeProyectos.add(miProgramador)
153+
miGerenteDeProyectos.add(miProgramador2)
154+
miGerenteDeProyectos2.add(miProgramador3)
155+
miGerenteDeProyectos2.add(miProgramador4)
156+
157+
console.log(miProgramador.add(miProgramador2))
158+
console.log(miGerente.print())
159+
160+
console.log(miProgramador.programar())
161+
console.log(miProgramador2.programar())
162+
console.log(miProgramador3.programar())
163+
console.log(miProgramador4.programar())
164+
console.log(miGerenteDeProyectos.gerenciarDeProyectos())
165+
console.log(miGerenteDeProyectos2.gerenciarDeProyectos())
166+
console.log(miGerente.gerenciar())
167+
168+
console.log(miGerente.imprimirEmpleados())
169+
console.log(miGerenteDeProyectos.imprimirEmpleados())
170+
console.log(miGerenteDeProyectos2.imprimirEmpleados())
171+
console.log(miProgramador.imprimirEmpleados())
172+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
* EJERCICIO:
3+
* Explora el concepto de manejo de excepciones según tu lenguaje.
4+
* Fuerza un error en tu código, captura el error, imprime dicho error
5+
* y evita que el programa se detenga de manera inesperada.
6+
* Prueba a dividir "10/0" o acceder a un índice no existente
7+
* de un listado para intentar provocar un error.
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea una función que sea capaz de procesar parámetros, pero que también
11+
* pueda lanzar 3 tipos diferentes de excepciones (una de ellas tiene que
12+
* corresponderse con un tipo de excepción creada por nosotros de manera
13+
* personalizada, y debe ser lanzada de manera manual) en caso de error.
14+
* - Captura todas las excepciones desde el lugar donde llamas a la función.
15+
* - Imprime el tipo de error.
16+
* - Imprime si no se ha producido ningún error.
17+
* - Imprime que la ejecución ha finalizado.
18+
*/
19+
20+
namespace challenge_10{
21+
// const dividir = (a: number, b: number): number =>{
22+
// if (b === 0) {
23+
// throw new Error("no se puede dividir entre 0")
24+
// }
25+
// return a / b
26+
// }
27+
28+
// try {
29+
// const resultado = dividir(10,0)
30+
// console.log(`Resultado: ${resultado}`)
31+
// }
32+
// catch(e){
33+
// console.error("Se a ocacionado un error: ", (e as Error).message)
34+
// }
35+
// console.log("Hola, que pasa!")
36+
37+
class DivisionByZeroError extends Error{
38+
constructor(){
39+
super("No se puede dividir por 0")
40+
this.name = "DivisionByZeroError"
41+
}
42+
}
43+
44+
//* Esta la cree para probar mi conocimiento sobre el tema
45+
46+
class StrTypeError extends Error{
47+
constructor(){
48+
super("el parametro no puede ser un string")
49+
this.name = "StrTypeError"
50+
}
51+
}
52+
53+
const process_param = (params: any[])=>{
54+
if (params.length < 3) {
55+
throw new RangeError("El numero de parametros es insuficientes, se esperan al menos 3")
56+
} else if (params[1] === 0){
57+
throw new DivisionByZeroError()
58+
} else if (typeof params[2] !== "number") {
59+
// throw new Error("No determiamos la causa del error") -> si ejecuto esta linea de codigo, manda un erro generico
60+
throw new StrTypeError()
61+
}
62+
63+
console.log(params)
64+
console.log(params[0] / params[1])
65+
console.log(params[2] + 5)
66+
}
67+
try{
68+
process_param([1,2,3,4])
69+
}
70+
catch(e){
71+
if (e instanceof RangeError) {
72+
console.error("Se ha productido el error: ", e.name, "->", e.message)
73+
} else if (e instanceof DivisionByZeroError) {
74+
console.error("Se ha productido el error: ", e.name, "->", e.message)
75+
} else if (e instanceof StrTypeError){ // no esta funcionando debido a que debia cargar un error generico
76+
console.error("Se ha productido el error: ", e.name, "->", e.message)
77+
} else if (e instanceof Error) {
78+
console.error("Se ha productido un error inesperado: ", e)
79+
}
80+
}
81+
finally{
82+
console.log("El programa ha finalizado")
83+
}
84+
}
85+

0 commit comments

Comments
 (0)