martes, 8 de septiembre de 2015

Métodos de extensión

Los métodos de extensión permiten "agregar" métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar de otra manera el tipo original. Los métodos de extensión son una clase especial de método estático, pero se les llama como si fueran métodos de instancia en el tipo extendido. En el caso del código de cliente escrito en C# y Visual Basic, no existe ninguna diferencia aparente entre llamar a un método de extensión y llamar a los métodos realmente definidos en un tipo.

Los métodos de extensión más comunes son los operadores de consulta LINQ estándar, que agregan funcionalidad de consulta a los tipos System.Collections.IEnumerable y System.Collections.Generic.IEnumerable<T> existentes. Para usar los operadores de consulta estándar, inclúyalos primero en el ámbito con una directiva using System.Linq. A partir de ese momento, cualquier tipo que implemente IEnumerable<T> parecerá tener métodos de instancia como GroupBy,OrderByAverage, etc. Puede ver estos métodos adicionales en la finalización de instrucciones de IntelliSense al escribir "punto" después de una instancia de un tipo IEnumerable<T>, como List<T> o Array.

Extension utilizando una entidad de EntityFramework.






miércoles, 2 de septiembre de 2015

Lambda Expressions

Una expresión lambda es una función anónima que puede utilizar para crear delegados o árboles expresión tipos.Mediante el uso de las expresiones lambda, puede escribir funciones locales que se pueden pasar como argumentos o devuelven como el valor de las llamadas a funciones. Las expresiones lambda son particularmente útiles para la escritura de expresiones de consulta LINQ.
Para crear una expresión lambda, se especifican los parámetros de entrada (si los hay) en el lado izquierdo del operador lambda =>, y se pone la expresión o bloque de instrucciones en el otro lado. Por ejemplo, la expresión lambda x => x * x especifica un parámetro que se denomina x y devuelve el valor de x al cuadrado.
El operador => tiene la misma precedencia que la asignación (=) y es asociativo a la derecha
Expresión Lambdas 
Una expresión lambda con una expresión en el lado derecho del operador => se denomina lambda expresión.Lambdas de expresión se utilizan ampliamente en la construcción de árboles de expresión. Una expresión lambda devuelve el resultado de la expresión y toma la siguiente forma básica:
(input parameters) => expression

Lambdas con los operadores de consulta estándar
Muchos operadores de consulta estándar tienen un parámetro de entrada cuyo tipo es uno de los Func <T, TResult>familia de delegados genéricos. Estos delegados utilizan parámetros de tipo para definir el número y tipo de parámetros de entrada, y el tipo de retorno del delegado. Func delegados son muy útiles para encapsular expresiones definidas por el usuario que se aplican a cada elemento de un conjunto de datos de origen. Por ejemplo, considere el siguiente tipo de delegado:
public delegate TResult Func<TArg0, TResult>(TArg0 arg0)
El delegado se pueden crear instancias como Func <int, bool> myFunc donde int es un parámetro de entrada y bool es el valor de retorno. El valor de retorno se especifica siempre en el último parámetro de tipo. Func <int, string, bool> define un delegado con dos parámetros de entrada, int y la cadena, y un tipo de retorno de bool. La siguiente delegado Func, cuando se invoca, devolverá verdadero o falso para indicar si el parámetro de entrada es igual a 5:
Func <int, bool> myFunc = x => x == 5;
resultado bool = myFunc (4); // devuelve falso supuesto
Lambdas ejemplo; 




domingo, 9 de agosto de 2015

IEnumerable VS IQueryable

IEnumerable

  1. IEnumerable existe en System.Collections Espacio de nombres.
  2. IEnumerable puede avanzar sólo sobre una colección, no puede moverse hacia atrás y entre los elementos.
  3. IEnumerable es mejor para consultar datos en memoria de colecciones como Lista, Array etc.
  4. Si bien los datos de consulta de base de datos, IEnumerable ejecuta consulta de selección del lado del servidor, los datos están en memoria en el lado del cliente.
  5. IEnumerable es adecuado para LINQ a objetos y LINQ para consultas XML.
  6. IEnumerable soporta ejecución diferida.
  7. IEnumerable no soporta consulta personalizada.
  8. IEnumerable no soporta carga diferida (Lazy Loading). Por lo tanto no es adecuado para la paginación.
IQueryable

  1. IQueryable existe en System.Linq Espacio de nombres.
  2. IQueryable puede avanzar sólo sobre una colección, no puede moverse hacia atrás y entre los elementos.
  3. IQueryable es mejor para consultar datos que no estén en memoria (como base de datos remota, servicio) colecciones.
  4. Si bien los datos de consulta de base de datos, IQueryable ejecuta consulta de selección en el lado del servidor con todos los filtros.
  5. IQueryable es adecuado para LINQ to consultas SQL.
  6. IQueryable soporta ejecución diferida.
  7. IQueryable soporta una consulta personalizada utilizando CreateQuery y ejecución de métodos.
  8. IQueryable soporta carga diferida (Lazy Loading). Por lo tanto es adecuado para paginación.

sábado, 27 de junio de 2015

Ejemplo Banco

Diagrama de clases:
Ejemplo de un banco que tiene las siguientes características:
  • Administrar Titulares
  • Administrar las cuentas del banco (Caja de ahorro y Cuenta Corriente)
  • Realizar las operaciones deposito y extracción
  • Administra los movimientos del banco

Modulo Seguridad

Ejemplo de un modulo de seguridad.
Características:

  • Administrar Usuarios
  • Administrar Grupos
  • Administrar Roles
  • Administrar Elementos/Permisos
  • Administrar Aplicaciones
Incluye ejemplos para utilizar el modulo, tanto para aplicaciones de escritorio como aplicación web.

Login

Main




Source: https://github.com/gggustavo/Security

sábado, 30 de mayo de 2015

jueves, 12 de marzo de 2015

MVC MongoDB

Componentes utilizados desde Visual Studio 2013, lenguaje C#

NuGet Packages instalado: Official .NET driver for MongoDB 



Estructura de Solución Patrón MVC


Core: Clases de ayuda:






Página principal:

 
 
Acceso: email y password o registrarse:
 

 
 
Twitter posteo


viernes, 6 de marzo de 2015

.Net 2015

Principales Componentes


NET Core influye el desarrollo de los siguiente componentes
  1. Innovación .NET - inovacion de la plataforma, lenguajes, compiladores, bibliotecas de clases base, modelos de aplicaciones.
  2. Open Source - nuevos procesos de ingenieria, apoyo de la comunidad
  3. Multiplataforma - Linux y Mac

Los principales componentes de .NET 2015

Marcos y tiempos de ejecución
.NET Framework es un entorno de ejecución administrado que proporciona una variedad de servicios a sus aplicaciones en ejecución. Consta de dos componentes principales: el Common Language Runtime (CLR), que es el motor de ejecución que se encarga de las aplicaciones en ejecución; y la biblioteca de clases de .NET Framework, que proporciona una biblioteca de prueba, código reutilizable que los desarrolladores pueden llamar desde sus propias aplicaciones. 
.NET Framework 4.6 se basa en 4.5.2 y contiene nuevas API, mejoras en el seguimiento de eventos, y muchas correcciones de errores.

.NET Core 5 es un propósito general, el marco modular que se puede utilizar en una amplia variedad de modelos de aplicaciones y plataformas, está disponible como código abierto, se puede implementar de forma modular y localmente (lado a lado), y contará con el apoyo Microsoft en Windows, Linux y Mac OSX.  
Es un conjunto de bibliotecas de clases refactorizada de base y tiempo de ejecución que incluye un nuevo compilador JIT ("RyuJIT"), el colector de basura .NET, interoperabilidad nativa y muchos otros componentes de tiempo de ejecución de .NET. Hoy, .NET Core crea y ejecuta en Windows.

Los compiladores
La Plataforma compilador .NET ("Roslyn") ofrece de código abierto C # y compiladores de Visual Basic con ricos API de análisis de código. Permite a las herramientas de análisis de código de construcción con las mismas API que son utilizados por Visual Studio. Roslyn produce independiente de la plataforma Intermediate Language (IL) y se utiliza en la construcción de contra .NET 2015, incluyendo Marco y Core.  
"RyuJIT" es el nuevo valor predeterminado just-in-time (JIT) para .NET en x64. El compilador JIT toma IL y compila para la arquitectura de la máquina particular, la primera vez que se ejecuta en tiempo de ejecución. Se utiliza para el escritorio y escenarios basados ​​en servidor, RyuJIT es una revisión del anterior compilador JIT de 64 bits que reduce significativamente los tiempos de arranque. También incluye soporte para SIMD (Single Instruction, múltiples datos) que permite operaciones matemáticas para ejecutar más de un conjunto de valores en paralelo. 

Nativo .NET C # compila a código máquina nativo que funciona como C ++, por lo que los desarrolladores siguen beneficiándose de la productividad y la familiaridad de .NET Framework con el rendimiento de código nativo. Por lo general, las aplicaciones que se dirigen a .NET se compilan a lenguaje intermedio (IL). En tiempo de ejecución, el (JIT) se traduce just-in-time de la IL a código nativo. Por el contrario, nativo de .NET es un compilador por delante de tiempo que compila aplicaciones directamente a código nativo y contiene un mínimo para la ejecución CLR. Popular Windows Store aplicaciones comienzan hasta un 60% más rápido y utilizan 15-20% menos de memoria cuando se compila con Native .NET. Aplicaciones de Windows universal se ejecutarán en .NET nativo (ARM, x86, x64).  

Modelos App
Modelos App extienden las bibliotecas comunes de .NET Framework 4.6 y .NET Core 5. Windows Forms, WPF, ASP.NET Web Forms, MVC 5, etc., los modelos de aplicaciones que conocemos hoy en día forman parte de .NET Framework 4.6 , vienen con muchas características nuevas, así como los beneficios de las nuevas innovaciones en los idiomas, compilador Roslyn y RyuJIT.
Además, hay nuevos modelos de aplicaciones que están diseñados para funcionar con el optimizado .NET Core 5.
ASP.NET 5 es un modelo de aplicación .NET para la creación de aplicaciones web modernas. Fue construido desde cero para proporcionar un marco de desarrollo optimizado para aplicaciones que, o bien se implementan en la nube o ejecutar de forma local. Consiste en componentes modulares con una sobrecarga mínima, por lo que mantener la flexibilidad al construir sus soluciones. ASP.NET 5 se puede ejecutar en la parte superior de .NET Framework 4.6 o .NET Core 5. 
Universal de aplicaciones de Windows es un modelo de aplicación que le permite compartir código fuente entre Windows Phone y aplicaciones de Windows (8.1+) y se despliegan en la Windows Store. Aplicaciones de Windows universal se ejecutarán en .NET nativo que compila IL a código máquina nativo y contiene un mínimo para la ejecución CLR.

NET Core también es compatible con Microsoft en Windows, Linux y Mac OSX. .NET Core crea y ejecuta en Windows hoy, y todo es de código abierto.Es muy importante para sentar las bases de .NET multiplataforma y construir un ecosistema más fuerte. 


Desarrollo .NET Core
Creo que siempre ayuda cuando la tecnología para aprender a tener un modelo mental de cómo funcionan las cosas juntos. Aquí está mi visión simplista de desarrollo de aplicaciones con .NET Core, a partir del código / build / ciclo de depuración para el despliegue de aplicaciones y ejecución. Despliegue y ejecución es diferente dependiendo de qué modelo de aplicaciones que se dirigen.




Usted escribe código tomar referencias muy modulares para las partes del BCL y aplicación de modelos que usted necesita. Roslyn es el compilador que toma su código y produce independiente de la plataforma Intermediate Language (IL). Además de la tubería compilador, hay un rico conjunto de API que puede utilizar para hacer todo tipo de análisis en su código. Si está utilizando Visual Studio, hay un montón de nuevas características IDE que utilizan estas API para darle una experiencia de codificación mucho más productivo.
Si usted está construyendo una aplicación de Windows universal, la cadena de herramientas nativo .NET toma desde allí. Las referencias se construyen con su aplicación en una imagen nativa desplegado localmente con un tiempo de ejecución mínimo. Si usted está construyendo una aplicación ASP.NET 5, las referencias y la CoreCLR se despliegan con su aplicación a nivel local para el servidor. Compilación JIT luego sucede en el arranque usando RyuJIT.
Además, ASP.NET 5 le permite hacer cambios en el código, guarda los cambios y actualizar el navegador sin explícitamente re-construcción del proyecto. Visual Studio utiliza Roslyn para habilitar esta compilación dinámica.

Puedes ver todos los repos y la actividad de todos los proyectos de la Fundación .NET aquí en GitHub: http://dotnet.github.io/
Aquí hay un par de buenos lugares para empezar. Echa un vistazo a las guías muy detalladas de readme y contribución.

 
 

miércoles, 4 de febrero de 2015

CoreCLR ahora es Open Source

CoreCLR es ahora de código abierto en GitHub. CoreCLR es el motor de ejecución de .NET en .NET Core , realizando funciones tales como la recolección de basura y la compilación en código máquina. .NET Core es una implementación modular de .NET que se puede utilizar como base de la pila para una amplia variedad de escenarios. Para aprender .NET Core difiere de .NET Framework, echar un vistazo a la introducción de .NET Core blog.



El repo CoreCLR contiene la implementación de tiempo de ejecución completo (llamado "CoreCLR") para .NET Core . Incluye RyuJIT, .NET GC, interoperabilidad nativa y muchos otros componentes. Se construye y se ejecuta en Windows. Usted puede ver el repositorio para ver soporte para Linux y Mac que se añade en los próximos meses.
.NET Core es parte de ASP.NET 5 y es un subconjunto de .NET Framework. Usted puede aprender más acerca de .NET Core y cómo y dónde se puede utilizar en el CoreCLR es de código abierto blog.
El .NET Core Bibliotecas repo contiene las bibliotecas de clases base, que proporciona tipos de datos y funciones de base (ex: String, Colecciones, HttpClient) en la parte superior de CoreCLR. Los dos repos juntos conforman .NET Core. El .NET Core es Open Source y Presentación de .NET Core entradas de blog describe nuestra estrategia .NET Core OSS y hoja de ruta con más detalle.



viernes, 30 de enero de 2015

.Net Open Source

.NET 2015 - .NET como Open Source, .NET en Mac y Linux, y Visual Studio Comunidad

  • Código abierto y multiplataforma.
    • .NET Core 5 es el marco moderno, por componentes que los buques a través de NuGet. Esto significa que puede enviar una versión privada del Core .NET Framework con su aplicación. Versiones de otras aplicaciones no pueden cambiar el comportamiento de su aplicación.
    • Estamos construyendo un .NET CLR Core para Windows, Mac y Linux y será tanto de código abierto y que será apoyado por Microsoft. Todo va a suceder en https://github.com/dotnet .
  • ASP.NET 5 funcionará en todas partes.
    • ASP.NET 5 estará disponible para Windows, Mac y Linux. Soporte para Mac y Linux vendrá pronto y todo se va a pasar a la intemperie en GitHub en https://github.com/aspnet .
    • ASP.NET 5 incluirá un servidor web para Mac y Linux.
  • Los desarrolladores deben tener una gran experiencia.
    • Hay una nueva GRATIS SKU de Visual Studio para desarrolladores de código abierto y estudiantes llamados Visual Studio Comunidad . Es compatible con las extensiones y mucho más, todo en una sola descarga. Esto no es Express. Esto es básicamente Pro.
    • Visual Studio 2015 y ASP.NET 5 para los desarrolladores de front-end.
  • Incluso fuente más abierto.
.NET Código abierto tiene mucho sentido. Tiene buen sentido de los negocios, el buen sentido de la comunidad.

Abrir .NET

Comunidad de Visual Studio

http://downloadvisualstudio.com

visual-studio-2013-logo

Comunidad de Visual Studio http://www.visualstudio.com/free .

Visual Studio 2013 Express para Web

Visual Studio Express 2013 para Web proporciona las herramientas básicas para la creación de aplicaciones web innovadoras convincentes y servicios. Esto incluye los editores ASP.NET para HTML5, CSS3, JavaScript, etc.

Visual Studio 2013 Express para Windows (escritorio)

Visual Studio Express 2013 para Windows de escritorio permite la creación de aplicaciones de escritorio en C #, Visual Basic y C ++, y es compatible con Windows Presentation Foundation (WPF), Windows Forms, y Win32.

Microsoft Visual Studio Team Foundation Server Express 2013

Visual Studio Team Foundation Server Express 2013 es un control de código fuente, gestión de proyectos, y la plataforma de colaboración en equipo en el núcleo de la suite de Microsoft de Application Lifecycle Management (ALM) herramientas.

Ejemplo sencillo Banco. Clientes y caja de ahorros

Un banco quiere registrar a sus clientes a través del DNI y su nombre.
El banco registra a cada uno de sus clientes a una cuenta que se denomina caja de ahorro en pesos, la misma tiene como atributo el nro. de cuenta y un saldo. 

En el siguiente ejemplo se desarrollo una aplicación Windows Forms com Visual studio 2010, lenguaje C#, y tiene las siguientes características;

1) Alta de Clientes. 

2) Alta Caja de ahorros. (En el alta de una caja de ahorro busca y valida que el cliente exista)

3) Movimientos del banco: realiza un deposito  y una extracción.
 Desposito 1000$ en la cuenta 1 


Extraccion de la cuenta 1, 500$.


4) Listado de clientes del banco.
 
5) Listado de caja de ahorros.

6) Menú principal para llamar a las distintas opciones dentro del banco. (puntos 1 al 5).



jueves, 29 de enero de 2015

Propiedades

Una propiedad es un miembro que ofrece un mecanismo flexible para leer, escribir o calcular el valor de un campo privado. Las propiedades pueden utilizarse como si fuesen miembros de datos públicos, aunque en realidad son métodos especiales denominados descriptores de acceso. De este modo, se puede obtener acceso a los datos con facilidad, a la vez que se promueve la seguridad y flexibilidad de los métodos.

  • Las propiedades permiten que una clase exponga una manera pública de obtener y establecer valores, ocultando el código de implementación o comprobación.
     
  • El descriptor de acceso de una propiedad get se utiliza para devolver el valor de propiedad y el descriptor de acceso set se utiliza para asignar un nuevo valor. Estos descriptores de acceso pueden tener niveles de acceso diferentes.
     
  • La palabra clave value se usa para definir el valor asignado por el descriptor de acceso set
     
  • Las propiedades que no implementan un descriptor de acceso set son de solo lectura.
     
  • En el caso de las propiedades simples que no requieren ningún código de descriptor de acceso personalizado, considere la posibilidad de utilizar propiedades autoimplementadas.
 

Objetos

En filosofía un objeto es aquello que puede ser observado, estudiado y aprendido, en contraposición a la representación abstracta de ese objeto que se crea en la mente a través del proceso de generalización. Un objeto en POO representa alguna entidad de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que estamos trabajando o al problema con el que nos estamos enfrentando, y con los que podemos interactuar. A través del estudio de ellos se adquiere el conocimiento necesario para, mediante la abstracción y la generalización, agruparlos según sus características en conjuntos. Estos conjuntos determinan las clases de objetos con las que estamos trabajando. Primero existen los objetos; luego aparecen las clases en función de la solución que estemos buscando. Ésta es la forma más común de adquirir conocimiento aunque no es la única. En ocasiones, cuando el observador es un experto del negocio (o del problema), el proceso puede ser a la inversa y comenzar el análisis en una base teórica abstracta, sustentada por el conocimiento previo que da lugar primeramente a clases de objetos que satisfagan las necesidades de la solución.

Clases

Una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto de variables -el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para proporcionar encapsulación, como especificadores de acceso.

Clases y miembros de clase abstractos y sellados

La palabra clave abstract permite crear clases y miembros de clase que están incompletos y se deben implementar en una clase derivada.
La palabra clave sealed permite impedir la herencia de una clase o de ciertos miembros de clase marcados previamente como virtuales. 

No se pueden crear instancias de una clase abstracta. El propósito de una clase abstracta es proporcionar una definición común de una clase base que múltiples clases derivadas pueden compartir. Por ejemplo, una biblioteca de clases puede definir una clase abstracta que se utiliza como parámetro para muchas de sus funciones y solicitar a los programadores que utilizan esa biblioteca que proporcionen su propia implementación de la clase mediante la creación de una clase derivada.
Las clases abstractas también pueden definir métodos abstractos. Esto se consigue agregando la palabra clave abstract antes del tipo de valor que devuelve el método.
 
Los métodos abstractos no tienen ninguna implementación, de modo que la definición de método va seguida por un punto y coma en lugar de un bloque de método normal. Las clases derivadas de la clase abstracta deben implementar todos los métodos abstractos. Cuando una clase abstracta hereda un método virtual de una clase base, la clase abstracta puede reemplazar el método virtual con un método abstracto
 
Las clases se pueden declarar como selladas si se incluye la palabra clave sealed antes de la definición de clase 
 
Una clase sellada no se puede utilizar como clase base. Por esta razón, tampoco puede ser una clase abstracta. Las clases selladas evitan la derivación. Puesto que nunca se pueden utilizar como clase base, algunas optimizaciones en tiempo de ejecución pueden hacer que sea un poco más rápido llamar a miembros de clase sellada.
Un método, indizador, propiedad o evento de una clase derivada que reemplaza a un miembro virtual de la clase base puede declarar ese miembro como sellado. Esto niega el aspecto virtual del miembro para cualquier clase derivada adicional. Esto se logra colocando la palabra clave sealed antes de la palabra clave override en la declaración del miembro de clase.   

El polimorfismo

El polimorfismo suele considerarse el tercer pilar de la programación orientada a objetos, después de la encapsulación y la herencia. Polimorfismo es una palabra griega que significa "con muchas formas" y tiene dos aspectos diferentes:
  • En tiempo de ejecución, los objetos de una clase derivada pueden ser tratados como objetos de una clase base en lugares como parámetros de métodos y colecciones o matrices. Cuando ocurre, el tipo declarado del objeto ya no es idéntico a su tipo en tiempo de ejecución.
  • Las clases base pueden definir e implementar métodosvirtuales, y las clases derivadas pueden invalidarlos, lo que significa que pueden proporcionar su propia definición e implementación. En tiempo de ejecución, cuando el código de cliente llama al método, CLR busca el tipo en tiempo de ejecución del objeto e invoca esa invalidación del método virtual. Por lo tanto, en el código fuente puede llamar a un método en una clase base y hacer que se ejecute una versión del método de la clase derivada.
 
Cuando una clase derivada hereda de una clase base, obtiene todos los métodos, campos, propiedades y eventos de la clase base. El diseñador de la clase derivada tiene las siguientes opciones:
  • Invalidar los miembros virtuales de la clase base.
  • Heredar el método de la clase base más próximo sin invalidarlo.
  • Definir una nueva implementación no virtual de esos miembros que oculte las implementaciones de la clase base.
Una clase derivada puede invalidar un miembro de la clase base si este se declara como virtual o abstracto. El miembro derivado debe usar la palabra clave override para indicar explícitamente que el propósito del método es participar en una invocación virtual.

Una clase derivada puede detener la herencia virtual declarando una invalidación como sealed. Para ello, es necesario colocar la palabra clave sealed antes de la palabra clave override en la declaración del miembro de la clase.



La herencia

La herencia, junto con la encapsulación y el polimorfismo, es una de las tres características principales (o pilares) de la programación orientada a objetos. La herencia permite crear nuevas clases que reutilizan, extienden y modifican el comportamiento que se define en otras clases. La clase cuyos miembros se heredan se denomina clase base y la clase que hereda esos miembros se denomina clase derivada. Una clase derivada solo puede tener una clase base directa. Sin embargo, la herencia es transitiva. Si ClassC se deriva de ClassB y ClassB se deriva de ClassA, ClassC hereda los miembros declarados en ClassB y ClassA.

Conceptualmente, una clase derivada es una especialización de la clase base. Por ejemplo, si tiene una clase base Animal, puede tener una clase derivada denominada Mammal y otra clase derivada denominada Reptile. Mammal es Animaly Reptile es Animal, pero cada clase derivada representa especializaciones diferentes de la clase base.
Al definir una clase para derivar de otra clase, la clase derivada obtiene implícitamente todos los miembros de la clase base, salvo sus constructores y destructores. La clase derivada puede, por tanto, reutilizar el código de la clase base sin tener que volver a implementarlo. En la clase derivada, puede agregar más miembros. De esta manera, la clase derivada extiende la funcionalidad de la clase base.
 

Principio interfaz de segregación

El principio interfaz de segregación (ISP) establece que ningún cliente debe ser forzado a depender de métodos que no utiliza. ISP divide las interfaces que son muy grandes en otras más pequeñas y más específicas para que los clientes sólo tendrán que saber sobre los métodos que son de interés para ellos. Estas interfaces de reducidas también se llaman interfaz papel ISP tiene la intención de mantener un sistema desacoplado y por lo tanto más fácil de refactorizar, cambiar y volver a implementar.

Ejemplo:

Principio de inversión de Dependencia

En la programación orientada a objetos , el principio de inversión de dependencia se refiere a una forma específica de desacoplamiento de software módulos. El principio establece:
A. módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de las abstracciones .
B. Las abstracciones no debe depender de los detalles. Detalles deberían depender de las abstracciones.
El principio invierte la forma en que algunas personas pueden pensar en el diseño orientado a objetos, que dicta que ambos objetos de alto y de bajo nivel deben depender de la misma abstracción.

Ejemplo: