o que é um membro vs. uma propriedade
-
22-07-2019 - |
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.
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 ??em> 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
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