Ejercicio Agenda

Vamos a crear una agenda de teléfonos. Crearemos la clase Agenda y utilizaremos un SortedList<string,string).

Tendremos los siguientes métodos:

agregarContacto(nombre,telefono) Añade el nombre a la agenda, si ya está cambia el número

quitarContacto(nombre) Elimina el nombre y el número de la agenda

telefono(nombre) Nos devuelve el teléfono de ese contacto

nombre(telefono) Nos devuelve el nombre del contacto que tenga ese teléfono

repetidos() Nos devuelve una lista con los contactos que tengan el mismo teléfono (List de string con los nombres)

Sobreescribiremos el método toString para que nos muestre toda la agenda.

Colecciones genéricas

https://docs.microsoft.com/es-es/dotnet/standard/generics/collections

Muchos de los tipos de colección genéricos son análogos directos de tipos no genéricos. Dictionary<TKey,TValue> es una versión genérica de Hashtable; usa la estructura genérica KeyValuePair<TKey,TValue> para la enumeración en lugar de DictionaryEntry.

List<T> es una versión genérica de ArrayList. Hay clases Queue<T> y Stack<T> genéricas que se corresponden con las versiones no genéricas.

Hay versiones genéricas y no genéricas de SortedList<TKey,TValue>. Ambas versiones son híbridos de un diccionario y una lista. La clase genérica SortedDictionary<TKey,TValue> es un diccionario puro y no tiene ninguna homóloga no genérica.

La clase genérica LinkedList<T> es una lista vinculada genuina. No tiene ninguna homóloga no genérica.

Ejercicio arraylist

Vamos a pedir al usuario el nombre de varios alumnos hasta que introduzca la palabra ‘fin’. Obviamente la palabra fin no la añadimos.

Ordenamos los alumnos alfabeticamente y los mostramos.

Si hay algún nombre repetido lo eliminamos.

Ejercicio Herencia

Vamos a crear una serie de clases para figuras geométricas.

La clase madre será abstracta y tendrá una propiedad Nombre y un método dibujar abstracto.

De ahí derivaremos una clase para figuras de 2 dimensiones también abstracta que incorpora el método area que nos devuelve un double.

Y de ahí una clase para figuras de 3 dimensiones también abstarcta que incorpore el método volumen.

Por último crearemos las clases cuadrado, circulo, cubo y esfera derivándolas de sus clases más adecuadas e implementando los métodos requeridos.

Una vez hecho esto, creamos otro proyecto para hacerlo mediante interfaces.

Modificadores acceso en C#

https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

  • public: Puede obtener acceso al tipo o miembro cualquier otro código del mismo ensamblado o de otro ensamblado que haga referencia a éste. El nivel de accesibilidad de los miembros públicos de un tipo se controla mediante el nivel de accesibilidad del propio tipo.
  • private: solamente el código de la misma class o struct puede acceder al tipo o miembro.
  • protected: solamente el código de la misma class, o bien de una class derivada de esa class, puede acceder al tipo o miembro.
  • internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado, pero no de un ensamblado distinto. Es decir, internal se puede tener acceso a tipos o miembros desde el código que forma parte de la misma compilación.
  • protected internal: cualquier código del ensamblado en el que se ha declarado, o desde una class derivada de otro ensamblado, puede acceder al tipo o miembro.
  • private protected: se puede tener acceso al tipo o miembro mediante tipos derivados del objeto class que se declaran dentro de su ensamblado contenedor.

Interfaces

Una interfaz define un contrato. Cualquier class o struct que implemente ese contrato debe proporcionar una implementación de los miembros definidos en la interfaz. A partir de C# 8.0, una interfaz puede definir una implementación predeterminada de miembros. También puede definir miembros static para proporcionar una única implementación de funcionalidad común.

https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/keywords/interface

https://geeks.ms/etomas/2010/07/07/c-bsico-interfaces/

https://www.tutorialsteacher.com/csharp/csharp-interface

 

SOLID

Los 5 principios SOLID de diseño de aplicaciones de software son:

  • S – Single Responsibility Principle (SRP)
  • O – Open/Closed Principle (OCP)
  • L – Liskov Substitution Principle (LSP)
  • I – Interface Segregation Principle (ISP)
  • D – Dependency Inversion Principle (DIP)

Entre los objetivos de tener en cuenta estos 5 principios a la hora de escribir código encontramos:

  • Crear un software eficaz: que cumpla con su cometido y que sea robusto y estable.
  • Escribir un código limpio y flexible ante los cambios: que se pueda modificar fácilmente según necesidad, que sea reutilizable y mantenible.
  • Permitir escalabilidad: que acepte ser ampliado con nuevas funcionalidades de manera ágil.

En definitiva, desarrollar un software de calidad.

https://profile.es/blog/principios-solid-desarrollo-software-calidad/

https://www.baeldung.com/solid-principles