Pergunta

Um amigo que é novo em programação OO perguntou-me a diferença entre um Membro e propriedade, e eu tinha vergonha de admitir que eu não poderia lhe dar uma resposta boa. Desde propriedades também podem ser eles mesmos objetos, eu fui deixado com uma descrição geral e lista de exceções.

Pode alguém por favor colocar para fora uma boa definição de quando considerar algo um membro vs. um imóvel? Talvez eu estou bastardizing o conceito, ou é apenas que um membro é apenas o uso interno nome que eu, ea propriedade é o que está exposto a outros objetos?

Eu não acho que não saber a resposta a esta questão tem afetado a qualidade da minha programação, e é apenas um ponto de semântica, mas ainda me incomoda que eu não posso explicar isso a ele.

Foi útil?

Solução

A propriedade é um tipo de membro. Outros podem ser construtores, métodos, campos, tipos aninhados, conversões, indexadores etc - dependendo do idioma / plataforma, é claro. Uma grande parte do tempo a exata significando da terminologia depende do contexto.

Para dar um C # definição espec�ico , a partir do C # 3.0 spec, ponto 1.6.1:

A tabela a seguir fornece uma visão geral dos tipos de membros de uma classe pode conter.
(Linhas para ...)

  • Constantes
  • Campos
  • Métodos
  • Propriedades
  • Os indexadores
  • Eventos
  • Operadores
  • Construtores
  • Destructors
  • Tipos

Note que isso é membros de um class . Diferentes "coisas" têm diferentes tipos de membros - em C #, uma interface não pode ter um campo como um membro, por exemplo

.

Outras dicas

Nenhum dos dois termos tem qualquer definido significa qualquer em Programação Orientada a Objetos ou Object-Oriented Design. Nem têm qualquer definido o que significa na esmagadora maioria das linguagens de programação.

Apenas um número muito pequeno de linguagens de programação têm um conceito chamado propriedade ou membro , e menos ainda ter ambos.

Alguns exemplos de idiomas que têm qualquer um dos dois são C ++ (que tem membros), ECMAScript (que tem propriedades) e C # (que tem ambos). No entanto, estes termos não necessariamente denotam os mesmos conceitos em diferentes linguagens de programação. Por exemplo, o termo "Estados" significa mais ou menos a mesma coisa em C ++ e C #, mas o termo "propriedade" significa coisas completamente diferentes em ECMAScript e C #. Na verdade, o termo "propriedade" em ECMAScript denota aproximadamente o mesmo conceito (ie. Meio mais ou menos a mesma coisa) como o termo "membro" em C ++ e C #.

Tudo isso é só para dizer que esses dois termos significam exatamente o que a especificação relevante para a linguagem de programação diz que eles querem dizer, nem mais nem menos. (Insert gratuita Lewis Carroll citação aqui.)

Propriedades é um tipo de membros.

Em C #, por exemplo, uma classe pode ter os seguintes membros:

  • Construtores
  • Destructors
  • Constantes
  • Campos
  • Métodos
  • Propriedades
  • Os indexadores
  • Operadores
  • Eventos
  • Os delegados
  • Classes
  • Interfaces
  • Structs

MSDN: C #: class

Membros são apenas objetos ou tipos primitivos pertencentes a uma classe.

Propriedades dar-lhe mais poder do que membros. É como uma maneira simplificada para criar getters e setters permitindo que você faça, por exemplo, getters públicas e setters privados; e colocar qualquer lógica que você quer na forma como ele será lido ou escrito. Eles podem ser usados ??como uma forma de expor os membros, sendo possível alterar a leitura e escrita de política mais tarde com mais facilidade.

Isso se aplica a C #. Não sei se isso é verdade para as outras línguas embora.

Um membro (variável) é apenas uma parte do objeto. A propriedade é (eu vou qualificar isso com "normalmente" - Eu não tenho certeza que é uma palavra tecnicamente claro que tem um significado inequívoco em vários idiomas) é um aspecto acessível ao público do objeto, por exemplo, através de métodos de adsorção e Setter.

Assim, enquanto (quase sempre) uma propriedade é uma variável membro alcançáveis, você pode ter uma propriedade que não é realmente parte do estado do objeto (não que isso é bom design):

public class Foo {
  public String getJunk()
  { return "Junk";}

  public void setJunk(String ignore){;}
  }
}

Ambas as propriedades e métodos são membros de um objeto. A propriedade descreve algum aspecto do objeto, enquanto uma acessos método ou usa o objeto possuir.
Um exemplo em pseudo-código:

Object Ball
Property color(some Value)
Method bounce(subroutine describing the movement of the Ball)

Quando a bola é definido e dado uma cor (propriedade) enquanto o método de rejeição é uma sub-rotina que descreve a forma como a bola vai reagir a bater outro objeto.
Nem todos os idiomas têm propriedades, ou seja, Java só tem campos que devem ser acessados ??por getters e setters.

As propriedades são uma forma de expor campos, onde os campos são as variáveis ??reais. Por exemplo (C #):

class Foo {
  private int field;
  public int Property {
    get { return field; }
    set { field = value; }
  }
}

PHP manual:

variáveis ??de membros de classe são chamados de "propriedades". Você também pode vê-los se refere ao uso de outros termos tais como "atributos" ou "campos". Eles são definidos usando um dos pública palavras-chave, protegido ou privado, seguido de uma declaração da variável normal. Esta declaração pode incluir uma inicialização.

Membro é um termo genérico (provavelmente se originou na C ++ , mas também definida em < a href = "https://docs.oracle.com/javase/tutorial/information/glossary.html#M" rel = "nofollow"> Java ) usado para denotar um componente de uma classe. Propriedade é um conceito amplo usado para designar uma característica particular de uma classe que, uma vez que a classe é instanciado, ajudará a definir o estado do objeto.

As passagens seguintes, extraídos de "Análise e Projeto Orientado a Objetos" por Grady Booch ajudar a esclarecer o assunto. Em primeiro lugar, é importante entender os conceitos de Estado e de comportamento:

O estado de um objecto engloba todas as propriedades (normalmente estáticas) do objecto mais a valores de corrente (usualmente dinâmica) de cada uma destas propriedades, . Por propriedades, queremos dizer a totalidade dos atributos e relacionamentos com outros objetos do objeto.

Comportamento é como um objeto age e reage, em termos de suas mudanças de estado e passagem de mensagens (métodos) ; a actividade externamente visível e testável de um objecto.

Assim, o comportamento de um objeto depende das operações disponíveis e seu estado (propriedades e seus valores atuais). Note-se que OOP é bastante genérica sobre determinada nomenclatura, pois varia muito de língua para língua:

O campo termos (Object Pascal), variável exemplo (Smalltalk), membro do objecto (C ++), e a ranhura (CLOS) são intercambiáveis ??, ou seja, um repositório para uma parte do estado de um objecto. Coletivamente, eles constituem a estrutura do objeto.

Uma operação sobre um objeto, definida como parte da declaração de uma classe. A mensagem termos (Smalltalk), método (muitas linguagens OO), a função de membro (C ++), e operação são geralmente intercambiáveis.

Mas a notação introduzida pelo autor é preciso:

Um atributo denota uma parte de um objeto agregado, e por isso é usado durante a análise, bem como design para expressar uma propriedade singular da classe. Usando a sintaxe independente de linguagem, um atributo pode ter um nome, uma classe, ou ambos, e, opcionalmente, uma expressão padrão:. A:C=E

Um funcionamento denota algum serviço fornecido pela classe. Operações (...) são distintos dos atributos anexando parênteses ou fornecendo assinatura completa da operação, composto por classe de retorno, nome e argumentos formais (se houver): R N(Arguments)

Em resumo, você pode pensar em membros como tudo o que compõe a classe, e as propriedades como os membros (atributos) que definem coletivamente a estrutura da classe, além de seus relacionamentos com outras classes. Quando a classe é instanciado, os valores são atribuídos às suas propriedades, a fim de definir o estado do objeto.

Felicidades

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top