"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Relacionamento ou habilidade, ambos os critérios são usados

Relacionamento ou habilidade, ambos os critérios são usados

Publicado em 2024-11-08
Navegar:197

Relationship or ability, both of these criteria are used

Na sociedade, ao avaliar a capacidade e o valor de uma pessoa, muitas vezes existem dois critérios diferentes: um é "baseado em relacionamentos" e o outro é "baseado na habilidade". Ambos os padrões estão incorporados em diferentes culturas, indústrias e valores pessoais, cada um com seus próprios apoiadores e detratores.

Dentro das linguagens de programação, existem dois tipos de padrões que organizam o código de maneiras diferentes, vinculando estruturas de dados a funções. Este artigo discutirá brevemente a aplicação e o princípio de ação desses dois padrões comuns.

modelo de classe

Na linguagem Javascript, é fornecida a palavra-chave class, que podemos usar para definir classes. É importante ressaltar que as classes são extensíveis e, quando os métodos são chamados em uma instância, elas procuram as definições dos métodos na ordem da cadeia de protótipos. Por exemplo:


class Animal {
    move() { return 'move' }
}
class Monkey extends Animal {
    jump() { return 'jump' }
}
class Human extends Monkey {
    write() { return 'write' }
}


As palavras-chave

extends podem nos ajudar a definir uma nova classe que se estende de outras classes. Podemos obter a cadeia de protótipos assim:


let me = new Human()
let proto = me.__proto__
let r = []

while (proto !== null) {
    r.push(proto.constructor.name)
    proto = proto.__proto__
}


Teremos r assim: ['Human', 'Monkey', 'Animal', 'Object']. Quando chamamos um método, o sucesso da chamada do método depende da existência de uma definição correspondente na cadeia de protótipos. Por exemplo, se você chamar me.move(), ele terá uma definição na classe Animal e a chamada será bem-sucedida.

Este é o modelo de classe, que gosto de chamar de modelo "relacional", que pode ser chamado desde que esteja definido na classe da própria instância, ou na classe pai, classe avó, e assim sobre.

Modelo baseado em competências

Comparado ao modelo baseado em relacionamento, o modelo baseado em competências é muito mais simples. Contanto que uma instância satisfaça uma determinada característica, o método correspondente pode atuar na instância independentemente do relacionamento da instância.


let me = {
    moveable: true,
    freezable: false
}

function move(x) { return x.moveable ? 'move' : undefined }
function freeze(x) { return x.freezable ? 'freeze' : undefined }


Neste modelo, dados e métodos são independentes uns dos outros. A vantagem é que é conciso e direto, mas a desvantagem é óbvia, devido à independência do método e dos dados, é difícil substituir a definição do método.

resumo

Depois de apresentar as duas formas de conectar estruturas de dados e métodos, podemos pensar que quando for necessário implementar métodos com diferentes funções de mesmo nome de acordo com a classe dos dados, é recomendável utilizar o modelo de classe relacional . Quando o método geralmente é relativamente fixo e os dados são mutáveis, e o mesmo método funciona em dados diferentes, o modelo baseado em competências pode ser usado.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/linjiezhang/relationship-or-ability-both-of-these-criteria-are-used-1dbd?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3