O que é orientado a objetos, suas três características básicas: encapsulamento, herança, polimorfismo

O que é pensamento orientado a objetos? É muito comum ter aprendido java e realmente não saber explicar para os outros o que significa orientação a objetos. Vamos revisar essa ideia fantástica juntos ~


1. Orientado a objetos e orientado a processos

Agora, cada vez mais linguagens de alto nível estão se tornando populares, como o conhecido c++, python, java, etc., todos baseados na linguagem 面向对象e
na linguagem mais básica que deve ser aprendida nas escolas - a linguagem c pertence 面向过程à linguagem.
Ok, agora vamos discutir a diferença entre esses dois tipos de idiomas

1. O que é orientado a processos?

Orientado a processos:
É analisar as etapas necessárias para resolver o problema e, em seguida, usar funções para realizar essas etapas passo a passo. Ao usá-las, elas podem ser chamadas uma a uma.

Por exemplo, quantos passos são necessários para um elefante caber em uma geladeira?
insira a descrição da imagem aqui
De acordo com o pensamento orientado ao processo:
Etapa 1: A equipe abre a porta da geladeira
Etapa 2: Enfia o elefante na geladeira
Etapa 3: A equipe fecha a porta da geladeira
Ei, podemos ver aqui,Orientado para o processo é realizar uma coisa passo a passo
expresso em código

    public void openDoor(){
    
    }  //开门
    public void putIn(){
    
    }       //装冰箱
    public void closeDoor(){
    
    }   //关门

Chamar esses métodos por sua vez está completo

2. O que é orientação a objetos?

O objeto é a abstração das coisas na questão
Orientado a objetos:
É abstrair todas as coisas na realidade em "objetos". Cada objeto é único e pode ter suas propriedades e comportamentos. Podemos resolver o problema chamando os métodos e propriedades desses objetos.

Use o pensamento orientado a objetos para resolver o problema de colocar elefantes em geladeiras

Pode-se dizer que uma compreensão geral do conceito de objetos é uma espécie de compreensão das coisas reais 抽象映射.
insira a descrição da imagem aqui
Por exemplo neste evento:
geladeira como objeto;
elefante como objeto.
A geladeira tem as seguintes funções: abrir a porta, carregar objetos, fechar a porta

class fridge{
    
    
    public void open(大象){
    
    }   //开门
    public void putIn(大象){
    
    }  //放进冰箱
    public void close(大象){
    
    }  //关门
}
class elephant{
    
    
	public void eat(){
    
    }   //吃
}

O que você vê? Cada objeto é independente e tem suas próprias funções, você só precisa se concentrar em realizar suas próprias funções. Portanto, no estágio de estabelecimento do modelo de objeto, concentre-se apenas nas funções do objeto, mas não considere como realizar essas funções.

Os benefícios da orientação a objetos incluem boa extensibilidade.Por exemplo, dei uma função de comer ao elefante e ele pode comer na geladeira chamando-a.Orientado a objetos é abstrair problemas reais em objetos e resolver problemas chamando as propriedades ou funções de cada objeto.

Se eu quiser modificar meus requisitos e mudar o elefante para um coelho, tenho que mudar o elefante em cada etapa para um coelho quando eu usar orientado a processo. E com soluções orientadas a objetos, posso até recriar um objeto coelho, basta selecionar o coelho ao chamar.

2. A relação entre classes e objetos

Muitas pessoas vão criar objetos, não é só newisso, não é só para chamar métodos de objeto new.方法. Como resultado, algumas pessoas subconscientemente consideram a classe como um objeto quando estão na nova classe, então a classe é um objeto?

Certamente não, primeiro dê seus conceitos básicos

1. Conceitos básicos

Objeto
Um objeto é um pacote composto de dados (descrevendo os atributos das coisas) e operações sobre os dados (refletindo o comportamento das coisas), descreve uma entidade de coisas objetivas e é a unidade básica do sistema.

Classe Uma
classe é a definição de um grupo de objetos com os mesmos dados e as mesmas operações.É o modelo do objeto, e os métodos e dados que ele contém descrevem o comportamento comum e os atributos de um grupo de objetos. Uma classe é uma abstração acima de um objeto, e um objeto é a personificação de uma classe, uma instância de uma classe. Uma classe pode ter suas subclasses, assim como outras classes, formando uma hierarquia de classes.

2. A diferença entre classe e objeto

1) Uma classe é uma abstração de um objeto, e um objeto é uma instância concreta de uma classe. As classes são abstratas e não ocupam memória, enquanto os objetos são concretos e ocupam espaço de armazenamento.

2) Uma classe é uma abstração de um grupo de objetos com as mesmas propriedades e comportamento. Podemos pensar em uma classe como um projeto para criar um objeto , e o objeto implementa algo de acordo com esse projeto.

Por exemplo, dado um projeto de um "guarda-chuva", projetamos um guarda-chuva ensolarado, um guarda-chuva de espada, etc., e você descobrirá que todos esses guarda-chuvas têm o mesmo comportamento ---- bloquear a chuva .
insira a descrição da imagem aqui

Portanto, o resultado da instanciação de uma classe é um objeto, e a abstração de uma classe de objetos é uma classe, que descreve um grupo de objetos com os mesmos atributos e métodos.

3. Características básicas: encapsulamento, herança, polimorfismo

1. Embalagem

(1) Conceitos básicos
Encapsulamento (encapsulamento) é a ocultação de informações. Isso significa que ao determinar o conteúdo de uma determinada parte do sistema, deve-se considerar que as informações e conexões de outras partes são realizadas dentro dessa parte, e as conexões de informações entre partes externas devem ser o menor possível.

(2) Quatro níveis de controle de acesso

  • público: aberto ao público, com o mais alto nível de acesso
  • protegido: Apenas exposto a classes ou subclasses no mesmo pacote
  • Padrão: exposto apenas a classes no mesmo pacote
  • privado: não aberto ao público, só pode ser acessado dentro do objeto, com o menor nível de acesso
    insira a descrição da imagem aqui

(3) Encapsulamento e uso
1. Esconda o máximo de coisas possível e melhore a interface simples com o mundo exterior
. Por exemplo, existem máquinas de lavar semiautomáticas e uma máquina de lavar totalmente automática.

A interface da máquina de lavar semiautomática possui os seguintes métodos:
① iniciar
② desligar
③ liberar água
④ temporização
⑤ lavar
⑥ drenar
⑦ desidratar

A máquina de lavar totalmente automática tem os seguintes métodos
: 1. Ligar
2. Desligar
3. Definir o modo da máquina de lavar
4. Iniciar a lavagem de roupas e desligar automaticamente após a lavagem

Em comparação, descobriremos que a máquina de lavar automática encapsula os detalhes de descarga de água, tempo, lavagem, drenagem, desidratação etc.

2. Ocultar todos os atributos
Adicione um determinado atributo para permitir o acesso externo e forneça um método público para acessar esse atributo. Se a classe dog tiver atributos de nome e idade, o mundo externo não terá permissão para acessar diretamente os atributos, mas poderá fornecer métodos get e set para acessar

class Dogs{
    
    
    private String name;  //名字
    private String age;   //年龄
    
    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getAge() {
    
    
        return age;
    }

    public void setAge(String age) {
    
    
        this.age = age;
    }
}

Em seguida, definimos a propriedade como privada e definimos o método de configuração da propriedade para o mundo externo como público.

Algumas pessoas podem perguntar, já que é aberto ao público, por que não definir diretamente os atributos de nome e idade para público, mas, em vez disso, defini-los por meio de métodos, será supérfluo?

Não, por quatro razões:

(1) De acordo com a lei objetiva de que a causa externa funciona por meio da causa interna
Suponha que o cachorro original tenha um nome chamado "Wangcai", que foi dado pelo proprietário original do próprio objeto, e o método setName() [ causa interna] é chamado. Bem, o dono que adotou o cachorro planeja mudar o nome do cachorro para "Ruibarbo", ele é o usuário e chama o método setName() [causa externa].

(2) Controle flexível do nível de acesso para leitura e modificação de atributos
Por exemplo, posso apenas informar aos usuários o nome do cachorro, mas eles não podem modificá-lo. Em seguida, defina setName() como privado e getName() como público.

(3) Impedir que usuários modifiquem atributos por engano
Chame diretamente os atributos da classe, o que devo fazer se cometer um erro. Assim, podemos adicionar restrições no método público setName() para evitar que os usuários modifiquem os atributos por engano. Por exemplo, a idade do cão deve variar de 0 a 20.

public void setAge(int age) {
    
    
    if (age >20 || age < 0){
    
    
        throw new IllegalArgumentException("口令不合法");
    }
    else {
    
    
        this.age = age;
    }
}

(4) Contribuir para o encapsulamento do objeto e detalhes de implementação.Se
não quisermos divulgar o processo de julgamento da maioridade legal acima para o usuário, iremos encapsular este processo em um método "transparente" com private. Este processo de julgamento da idade legal é transparente para o usuário.

Um conceito que tem o mesmo significado de encapsulamento é a transparência. O objeto encapsula os detalhes de implementação, o que significa que os detalhes de implementação do objeto são transparentes para o usuário. A transparência é entendida aqui como “invisível”

public void setAge(int age) {
    
    
        isLegal();   //判断是否合法
        this.age = age;
    }

private void isLegal(){
    
    
    if (age >20 || age < 0){
    
    
        throw new IllegalArgumentException("口令不合法");
    }
    else return;
}

2. Herança

Herança: permite que um objeto de um tipo adquira as propriedades e métodos de um objeto de outro tipo. Herança significa que a subclasse herda as características e comportamentos da classe pai, de modo que o objeto da subclasse (instância) tenha os campos de instância e métodos da classe pai, ou a subclasse herda os métodos da classe pai, de modo que a subclasse tenha o mesmo comportamento da classe pai.

(1) Gramática

classe A estende B{}

O que você herdou no total? existem dois casos

  • Quando A e B estão no mesmo pacote, A herda as variáveis ​​de membro e os métodos de membro dos níveis de acesso público, protegido e padrão em B
  • Quando A e B não estão no mesmo pacote, A herda as variáveis ​​de membro públicas e protegidas e os métodos de membro em B

(2) Herdar a variável/método do membro da classe pai
hanqishi herda a classe pai Dog

class Dog{
    
    
    public String name="小白";
    public void say(){
    
    
        System.out.println("汪汪汪");
    }
}
//哈奇士
class haqishi extends Dog {
    
    
    public void test(){
    
    
        System.out.println(name);
        say();
    }
}

Chame o método test() de haqishi, o teste é o seguinte

Xiaobai
au au

Resultados do teste: a subclasse haqishi herda as variáveis ​​de membro e os métodos de membro da classe pai

(3) Reescrever o método da classe pai
A subclasse haqishi reescreve o método say da classe pai Dog

class Dog{
    
    
    public String name="小白";
    public void say(){
    
    
        System.out.println("汪汪汪");
    }
}
//哈奇士
class haqishi extends Dog {
    
    
    @Override
    public void say() {
    
    
        //super.say();    继承父类原有方法
        System.out.println("哈哈哈");
    }
}

Chame o método say da subclasse, o teste é o seguinte:

hahaha

(4) Sobrecarregando o método de classe pai
O método de sobrecarga deve atender às seguintes condições:
1. O nome do método é o mesmo
2. O tipo de parâmetro, número e ordem do método são pelo menos um diferente.
3. O tipo de retorno de o método pode ser diferente
4. O modificador do método pode ser diferente

class Dog{
    
    
    public String name="小白";
    public void say(){
    
    
        System.out.println("汪汪汪");
    }
}
//哈奇士
class haqishi extends Dog {
    
    
   //重载 改变参数
    public void say(String name) {
    
    
        System.out.println(name+"汪汪汪");
    }
	//重载 改变参数+返回值
    public int say(int age) {
    
    
        System.out.println("汪汪汪"+age);
        return age;
    }
}

Chame
haqishi h = new haqishi();
h.say();
h.say("Haqishi");
h.say(6);
os resultados são os seguintes:

au au au au
au
au au au 6

3. Polimorfismo

Polimorfismo: Para o mesmo comportamento, diferentes objetos de subclasses têm diferentes manifestações. Existem 3 condições para a existência de polimorfismo:
1) Herança 2) Reescrita 3) A referência da classe pai aponta para o objeto da subclasse.

public class extend {
    
    
    public static void main(String[] args) {
    
    
        Animal a = new Dog();
        Animal b = new Cat();
        a.say();
        b.say();
    }
}

abstract class Animal {
    
    
    abstract void say();
}
//猫
class Cat extends Animal{
    
    
    public String name="小黑";
    public void say(){
    
    
        System.out.println("喵喵喵");
    }
}
//狗
class Dog extends Animal{
    
    
    public String name="小白";
    public void say(){
    
    
        System.out.println("汪汪汪");
    }
}

resultado da operação

au au miau
miau miau

Entenda o polimorfismo
Neste ambiente de execução, o tipo específico apontado pela variável de referência e a chamada de método emitida por meio da variável de referência não são determinados durante a programação, mas são determinados durante a execução do programa. A máquina virtual Java chama o método especificado do objeto de acordo com o objeto apontado pela variável de referência. Este mecanismo de operação é chamado动态绑定

Referências: "Programação Orientada a Objetos Java (Segunda Edição)" - Sun Weiqin

Acho que você gosta

Origin blog.csdn.net/weixin_51201930/article/details/122652397
Recomendado
Clasificación