modo de design elegante - uma base orientada a objetos (on)

Como entender orientada a objeto

características abstratas orientadas a objetos são encapsulamento, herança, polimorfismo baseado na premissa. análise racional abstrato do negócio da compreensão legítima e razoável do tópico. O resumo deve ser razoavelmente auto-consistente, fácil de entender a relação entre a combinação e agregação: a principal diferença é a diferença entre o ciclo de vida. relações combinação global e o indivíduo como um todo, deixou o todo, o indivíduo não faz sentido, ao produzir, ao mesmo tempo destruída. Relação polimerizado, é a presença de uma parte separada indivíduo que possui o significado de existência, mesmo a partir do acabamento, um indivíduo pode também estar presente separadamente. Não abuse Herança: Mais herdar o papel do tempo é a maioria dos conceitos básicos de propriedades multi-estado orientadas a objetos para dois serviços: Classes e Objetos

Qual é a distinção entre "programação orientada a objetos," eo que é "linguagem de programação orientada a objetos."

É um estilo de programação orientada a objetos especificação ou programação. É um objeto da classe ea organização código da unidade base, e por abstração, encapsulamento, herança, polimorfismo quatro mais código característico desenho e implementação pedra angular

programação de apoio sintaxe da linguagem aulas mecanismo e objetos, e um açúcar sintático ready-made (mecanismo de gramática), pode facilitar a realização das quatro características de programação linguagem de programação orientada a objetos para distinguir entre o que é "programação orientada a processo" e que está "orientada orientada a objeto programação do objeto "

    面向过程编程: 
        以动词为主,分析出解决问题所需要的步奏,然后用函数把这些步奏一步一步实现,使用的时候一个一个依次调用就可以了。
    面向对象编程:
        以名词为主,把构成问题事务分解各个对象,建立对象的目的不是为了完成一个步奏,而是为了描述某个事物在整个解决问题的步奏中的行为。

-Orientado a objeto: os cães (ossos) orientadas para o processo: (ossos cão) comer.

Programação orientada a objetos apresenta Princípios Básicos

Pacote: Os atributos e métodos abstratos embalados em conjunto e, em seguida, para esconder informações, proteção de dados

/*
    * @title 创建对象实现封装有四种方法
    * @method1 对象字面量方式{name: 'Mark_Zhang',key:'value'}  只能创建一次、复用率差、字面量多了代码冗余
    * @method2 内置构造函数创建 var parson =  new Object(); parson.name="内置构造函数创建对象"
    * @method3 简单的工厂函数 function createObj (name){let obj = new Object(); obj.name = name; return obj}
    * @method4  自定义构造函数
  */
  function Person (name, agei) {
    // 构造函数中多包含的属性和方法就可以理解抽象的一部分
    // public  公共属性
    this.name = name; // 实例可以直接通过对象点的方式直接访问
    // private  私有属性
    let age = agei;
    this.getAge = function(){
      return age;
    }
    this.setAge = function(a){
      age = a;
    }
  }
  Person.prototype.show = function(){
    return  this.name   ' 今年'   this.getAge()   '岁';
  }
  // 必须通过 new 关键字创建对象,否则 this 指向的就是 window 对象
  let p1 = new Person('Mark_Zhang',18)
  console.info(p1.name, p1.age) // Mark_Zhang undefined
  // 调用对象方法 (调用对象暴露的接口)
  p1.setAge(30);
  console.info(p1.getAge());
  // 调用原型方法
  console.info(p1.show())
  let p2 = new Person();
  // 利用对象动态性来添加属性
  p1.n = 'sunLine'
  console.info(p2.n) //sunLine
  
  /**
   * @title 通过【构造函数】和【原型法】添加成员的区别
   * @区别一: 通过【原型法】分配的函数(引用类型即可) 所有对象共享
   * @区别二: 通过【原型法】分配的属性( 基本类型)独立
   * @区别2.2: 我们还可以在类的外部通过. 语法进行添加,因为在实例化对象的时候,并不会执行到在类外部通过. 语法添加的属性,所以实例化之后的对象是不能访问到. 语法所添加的对象和属性的,只能通过该类访问。
   * @区别三: 若希望所有对象使用同一个函数,建议使用原型法添加函数,节省内存 
   * @区别四: 通过prototype给所有对象添加方法,不能访问所在类的私有属性和方法
   */

Resumo: Como a implementação Ocultar método, para que o chamador fornece apenas as funções necessárias abordagem relacional, esses recursos não precisam saber especificamente como conseguir. Herança: Herança é um dos maiores benefícios da reutilização de código

Herança: subclasses pode usar todas as funções da classe pai, e estender esses recursos. Processo de sucessão, isto é, a partir do geral ao processo particular.

A classe herdada, herdada, a chamada classe é o método protótipo utilizado, o método para adicionar na classe protótipo pai, então o protótipo subclasse pai instância objeto de classe

// 声明父类
let SuperClass function  (){
  let id = 1;
  this.name = ["继承"];
  this.superValue = function () {
    console.info("superValue is true")
    console.info('id---->',id)
  }
}
// 通过原型给父类添加方法
SuperClass.prototype.getSuperValue = function() {
  return this.superValue();
}
// 声明子类
let SubClass = function () {
  this.subValue = function () {
    console.info("this is subValue")
  }
}
// 子类继承父类
SubClass.prototype = new SuperClass();
// 为子类添加公有方法
SubClass.prototype.getSubValue = function() {
  return this.subValue();
}
let sub = new SubClass(),
    sub2 = new SubClass();
    
sub.getSuperValue(); // superValue is true
sub.getSubValue(); // this is subValue
console.info(sub.id)  // undefined
console.info(sub.name) // 继承
sub.name.push('类式继承')
console.info(sub2.name) // ['继承','类式继承']

O núcleo do que é um SubClass.prototype código = new SuperClass (); o papel do método protótipo objeto de protótipo de classe de objeto é adicionar um total de protótipo para a classe, depois da aula, mas não pode acessar diretamente esses métodos, somente a classe é instanciado, o novo as cópias criadas com as propriedades do objecto e os métodos do construtor classe pai e protótipo proto -mãe pontas objecto protótipo classe. De modo que as subclasses pode acessar as propriedades e métodos do público classe pai e protegido, ao mesmo tempo, propriedades privadas e métodos da classe pai não é herdada por subclasses. Bata negro como o último parágrafo do código acima, a utilização do método de herança classe, se houver um construtor de tipo de referência na classe principal, irá ser comum a todos os exemplos de subclasses, portanto, um exemplo de uma subclasse se o tipo de referência é alterada ele irá afetar as instâncias de outras subclasses. construtores Inheritance

Oficialmente devido às insuficiências acima mencionados, somente a herança construtor, construtores herdado ideia central é SuperClass.call (isto, ID), que aponta directamente alterar esta, de modo que as propriedades e métodos criados por essa cópia em uma subclasse um, porque é um só exemplar, de modo que cada instância de uma subclasse de outro. Mas ele irá resultar em uma perda de problemas de memória

// SubClass.prototype = new SuperClass();
function SubClass(id) {
  SuperClass.call(this,id)
}

Classes herdam construtor subclasse herda a ideia central é o protótipo pai objecto de classe exemplo SuperClass.call (isto, ID) objectos zodiac e vantagens do método do Exemplo subclasses do ponto protótipo classe pai

Cada exemplo de uma subclasse de resíduos são possíveis interacções entre a memória individual de forma independente uns dos outros desvantagens subclasse (atributos comuns subcoluna e métodos na superclasse adicionando protótipo) combinado herança

Pelo exposto duas herança, combinadas as vantagens de ambos sorteio herdado, isto é, para evitar a perda de memória, e de tal modo que cada um exemplo de uma subclasse de cada outro.

// 组合式继承
// 声明父类
let SuperClass = function(name) {
  this.name = name ;
  this.books = ['js','html','css']
}
// 声明父类原型上的f方法
SuperClass.prototype.showBooks = function(){
  console.info(this.books)
}
// 声明子类
let SubClass = function (name) {
  SuperClass.call(this,name);
}
// 子类继承父类(链式继承)
SubClass.prototype = new SuperClass();
let subclass1 = new SubClass('java');
let subclass2 = new SubClass('php');
subclass2.showBooks();
subclass1.books.push('ios');    //["js", "html", "css"]
console.log(subclass1.books);  //["js", "html", "css", "ios"]
console.log(subclass2.books);   //["js", "html", "css"]

Parasita combinação de herança

Portanto, a pergunta novamente - método herdado combinado é bom, mas pode causar um problema, o construtor da classe pai será criado duas vezes (call () outra vez, tempo novo e de novo), de modo a fim de resolver este problema , houve uma combinação de herança parasitária. A questão-chave é apenas o construtor da classe pai é criado na forma de uma combinação de herança e construtores classe duas vezes em sucessão, mas na hierarquia de classes, não precisamos para criar o construtor da classe pai, nós só queremos herda subclasse do pai protótipo para a classe. Por isso, criamos um protótipo dar ao pai uma cópia e, em seguida, modificar a propriedade construtor de subclasse, e, finalmente, criar o protótipo pode ser um herda subclasse // //-style protótipo de estilo protótipo tipo de classe é realmente herdou a implementação do pacote herdado função retorna um exemplo, um exemplo modificado da herança protótipo objectos recebidos, S

function inheritObject(o) {
    //声明一个过渡函数对象
    function F() {}
    //过渡对象的原型继承父对象
    F.prototype = o;
    //返回一个过渡对象的实例,该实例的原型继承了父对象
    return new F();
}

// // Parasitárias Parasitic herança é para herdar o pacote segundo protótipo herdou, de modo que o protótipo é igual às subclasses protótipo da classe pai. E durante o segundo pacote na herança objeto da extensão

function inheritPrototype(subClass, superClass){
    //复制一份父类的原型保存在变量中,使得p的原型等于父类的原型
    var p = inheritObject(superClass.prototype);
    //修正因为重写子类原型导致子类constructor属性被修改
    p.constructor = subClass;
    //设置子类的原型
    subClass.prototype = p;
}
//定义父类
var SuperClass = function (name) {
    this.name = name;
    this.books = ['javascript','html','css']
};
//定义父类原型方法
SuperClass.prototype.getBooks = function () {
    console.log(this.books)
};
//定义子类
var SubClass = function (name) {
    SuperClass.call(this,name)
}
inheritPrototype(SubClass,SuperClass);
var subclass1 = new SubClass('php')

Polimorfismo: A maior vantagem é melhorar o resumo escalabilidade e reutilização de código:

pacote

O quê: informações escondidos, acesso a dados de proteção. Como: interfaces de exposição e propriedades, a necessidade de programação sintaxe da linguagem para fornecer controle de acesso limitado. Por: melhorar a manutenção, reduzir a complexidade da interface, melhorando a facilidade de classes.

abstrato

O que: hide implementação, os usuários só precisam se preocupar com a função, sem a preocupação de implementação. Como: pela classe ou classe abstrata implementa uma interface, um mecanismo especial gramática não-essencial. Por: melhorar a escalabilidade da manutenção de código; complexidade reduzida, reduziu a carga dos detalhes.

Herdar

O que: representa a relação é-um, dividido em herança simples e múltipla. Como: a necessidade de fornecer mecanismo especial de programação sintaxe da linguagem. Por exemplo, o Java "estende", C de ":". Por: para resolver o problema de reutilização de código.

polimorfismo

O que: subclasse substituição classe pai, a implementação chamada subclasse em tempo de execução. Como: a necessidade de fornecer mecanismo especial de programação sintaxe da linguagem. Tais como herança, interfaces, classes, pato-digitação. Por: melhorar a reutilização de código e extensibilidade.

modelo 3W é a chave Por que, não por que, os outros dois haveria sentido da existência. Como pode ser visto a partir dos quatro propriedades, o objecto final orientada para um único propósito: manutenção. Fácil de expandir e fácil reutilizar e afins pertencem a reduzir a complexidade da manutenção de implementação.retrato

Publicado 35 artigos originais · ganhou elogios 64 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/tjx11111/article/details/104294110
Recomendado
Clasificación