Programación orientada a objetos POO

Esta sección habla sobre qué es la programación orientada a objetos. Antes de hablar de Orientación a Objetos, lo que tenemos que mencionar es Programación Orientada a Procesos. El lenguaje C es un lenguaje orientado a procesos. ¿Cuál es la diferencia entre los dos? Podemos imaginar un escenario-cocinando en la cocina:

Para explicar en una forma orientada al proceso, el primer paso: preparar los materiales, el segundo paso: encender un fuego, el tercer paso: sofreír, el cuarto paso: servir; orientado al proceso es escribir una función, cada función realiza una parte de la operación, Finalmente, de acuerdo con este conjunto de funciones, el propósito es implementar un requisito general.

Para la orientación a objetos, explicamos la cocina de la misma manera, el primer paso: debe haber un chef, una estufa y un camarero, el segundo paso: el chef prepara los materiales, el tercer paso: la estufa está en llamas, el cuarto paso: el chef Sofreír, el quinto paso: el camarero sirve los platos. El método de programación orientada a objetos organiza las funciones independientes originales con los objetos a los que pertenecen y las encapsula en métodos (la "función" en la orientación a objetos tiene un nuevo método llamado Método). Aunque la cantidad de código aumentará, este tipo de pensamiento de programación es razonable, realista y más fácil de entender, porque las responsabilidades de cada objeto son claras, por lo que el mantenimiento posterior será más conveniente.

A continuación, en el nivel de código, demuestre la diferencia entre orientado a objetos y orientado a procesos:

Procesalización:

#include "stdio.h"
​
void Prepare(){
  printf("准备食材。\n");
}
void Fire(){
  printf("起火\n");
}
void Cooking(){
  printf("炒菜,\n");
  printf("炒完了\n");
}
void Serve(){
  printf("请享用。");
}
​
main(){
  Prepare();
  Fire();
  Cooking();
  Serve(); 
}

Programación orientada a objetos POO

Objetivación:

//创建三个对象
//厨师
class Cook
{
    //准备食材的方法
    public void Prepare()
    {
        Console.WriteLine("厨师准备食材。");
    }
    //做饭的方法
    public void Cooking()
    {
        Console.WriteLine("厨师正在做饭...");
        Console.WriteLine("厨师做好了。");
    }
}
//灶台工具类
static class CookingBench
{
    //静态工具方法:起火
    public static void Fire()
    {
        Console.WriteLine("灶台生火。");
    }
}
//服务员
class Waiter
{
    //上菜方法
    public void Serve()
    {
        Console.WriteLine("请享用。");
    }
}

Llamado en el método principal:

Cook cook=new Cook();
Waiter waiter=new Waiter();
​
cook.Prepare();
CookingBench.Fire();
cook.Cooking();
waiter.Serve();

Programación orientada a objetos POO

La orientación a objetos tiene tres características: encapsulación, herencia y polimorfismo. Hablemos de ello en detalle a continuación:

Paquete:

Todo el mundo tiene sus propios secretos. Lo mismo ocurre con el código orientado a objetos. Entre los objetos, hay objetos que pueden ser vistos por el mundo exterior, y algunos no son vistos por el mundo exterior. Esta idea de ocultar algunos miembros es encapsulación. Para lograr la encapsulación, primero debes Obtenga información sobre los cuatro modificadores de acceso: público, privado, proteger, interno

Los modificadores de acceso pueden modificar clases, propiedades y métodos. Utilice modificadores para modificar clases o propiedades y métodos, con diferentes niveles de acceso. El modificador de acceso debe escribirse primero al declarar:

public class publicClass{}//声明一个类
private bool isPublic;//声明一个属性

público: público, este nivel de acceso es el más bajo.

privado: privado, como su nombre lo indica, este nivel de acceso es el más alto y solo se puede acceder dentro del alcance de la declaración.
proteger: Protegido y solo se puede acceder a él en la cadena de herencia. Para decirlo sin rodeos, solo una clase heredada puede acceder a los miembros protegidos de esta clase.

interno: interno, solo accesible en el mismo conjunto. Puede entenderse de forma estricta como accesible en el mismo espacio de nombres.

También hay una combinación de punch: protect internal, que consiste en cumplir con el mismo ensamblaje, pero también hay que heredar la relación para acceder.

A través de estas palabras clave, podemos lograr la encapsulación. Al desarrollar, solo necesita especificar qué tipo de permisos de acceso se asignan a las clases o propiedades, métodos, etc.que escribe.

heredar:

El concepto de herencia también es fácil de entender. Es como en la vida real, un hijo hereda la propiedad de los padres, luego las cosas de los padres se convierten en las del hijo. En C #, la herencia entre clases se logra mediante ":" de.

public class Father{}
public class Chlid:Father{}//Child类继承了Father

Tenga en cuenta que C # es un lenguaje de herencia único, lo que significa que una clase solo puede heredar una clase principal.

Las subclases pueden heredar propiedades o métodos no privados en la clase principal. Si se puede acceder a propiedades o métodos privados, no habrá una palabra clave de protección. A través de la herencia, podemos extraer el código repetitivo compartido por las subclases en la clase padre, de modo que todas las subclases no necesiten declarar estos miembros, lo que reduce una gran cantidad de código. En la estructura de herencia de C #, la clase de objeto es la clase principal de todas las clases, y cualquier clase hereda el objeto de forma predeterminada. La clase de objeto nos proporciona algunos de los miembros más básicos de la clase, como nuestro método tostring () de uso común.

Existe un principio en la orientación a objetos llamado principio de apertura-cierre. Este principio estipula que está cerrado a la modificación y abierto a la extensión. Es decir, después de escribir una clase y usarla durante un período de tiempo, necesitamos modificar esta clase debido a actualizaciones del proyecto u otras razones. (Agregue algunas cosas nuevas) En este momento, de acuerdo con el principio de apertura y cierre, no podemos modificarlo directamente. En su lugar, tenemos que escribir otra clase, heredarla y agregar una nueva lógica comercial a la subclase. Este también es un propósito de la herencia.

En herencia, hay otro concepto llamado anulación de método, es decir, un método de la subclase tiene el mismo nombre que el método de la clase principal heredada, de modo que el método de la subclase sobrescribe el método de la clase principal. Este proceso se está reescribiendo. Este concepto se ampliará en detalle en la sección que presenta específicamente clases y métodos.

Polimorfismo:

El polimorfismo depende de la herencia, solo la herencia puede lograr el polimorfismo. La misma clase tiene diferentes formas es el polimorfismo. Por ejemplo, los perros tienen diferentes formas: huskies, perros pastores, corgis, etc. La manifestación en el código es que la clase padre puede recibir la subclase para asignarle valores. Tome el ejemplo anterior nuevamente, el siguiente código es un ejemplo de polimorfismo:

Father f=new Chlid();

La base del polimorfismo es el principio de transformación de Richter: la clase secundaria hereda la clase principal, luego, la escena que se aplicó originalmente a la clase principal debe ser aplicable a la clase secundaria, porque la clase secundaria hereda todas las funciones explícitas de la clase principal, y la clase principal puede hacer Sí, las subclases también pueden hacerlo. Este principio es para definir la existencia de esta teoría. Las subclases pueden reemplazar directamente a la clase principal y convertir todas las clases principales en subclases. No hay diferencia en el comportamiento del programa.

El polimorfismo también es una piedra angular muy importante en la programación orientada a objetos. Generalmente utilizamos interfaces tanto como sea posible en programación, orientadas a la abstracción y reducen el acoplamiento. Debido al polimorfismo, podemos implementar operaciones de instancia a través de interfaces o algunas estructuras de datos abstractas. .

Finalmente, se utiliza un ejemplo para demostrar el polimorfismo (algunos conocimientos relacionados con clases y métodos se explicarán en detalle en la siguiente sección de clases y métodos):

     public class Dog
    {
    public string name { get; set; }

    public Dog(string name)
    {
        this.name = name;
    }

         public void introduce()
    {
        Console.WriteLine("这是一只:" + name);
    }
    }
    ​
    public class Husky : Dog
    {
    //调用父类的构造方法,为name赋值
    public Husky():base("Husky"){}
    }
    ​
    public class Koji : Dog
    {
      public Koji() : base("Koji"){}
    }
    ​
    class DogStore
    {
    public Dog dog { get; set; }
    ​
    public DogStore(Dog dog)
    {
        this.dog = dog;
    }
    ​
    public void wantBuy()
    {
        Console.WriteLine("Do u want this "+dog.name+"?");
    }
    }

Hay una clase Dog común en el código anterior, y hay dos clases Husky respectivamente, que Corgi heredó. También hay una tienda para perros, que requiere el atributo Perro.

Echemos un vistazo al código en el método principal:

DogStore dogStore=new DogStore(new Husky());
dogStore.wantBuy();
dogStore=new DogStore(new Koji());
dogStore.wantBuy();

Programación orientada a objetos POO
Recibimos subclases más específicas a través de la clase padre. Esta es una muy buena encarnación del polimorfismo, que también es un método de programación muy elegante y eficiente.

 Cuenta pública personal, me encanta compartir, el conocimiento no tiene precio.

Programación orientada a objetos POO

Supongo que te gusta

Origin blog.51cto.com/14960461/2542693
Recomendado
Clasificación