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 ~
Diretório de artigos
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?
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 抽象映射
.
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ó new
isso, 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 .
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
(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