Pergunta

O que faz um tipo diferente de classe e vice-versa?

(no sentido linguagem agnóstico geral)

Foi útil?

Solução

A seguinte resposta é de Gof livro ( Design Patterns )

de um objeto Class define como o objeto é implementado classe .A define o estado interno do objecto e a implementação do seu operações.

Em contraste, um objeto de tipo refere-se apenas à sua interface - um conjunto de solicitações a que pode responder.

Um objeto pode ter muitos tipos, e objetos de diferentes classes podem têm o mesmo tipo.

//example in c++
template<typename T> 
const T & max(T const & a,T const &b)
{
return a>b?a:b;  //> operator of the type is used for comparison
}

função max requer um tipo com operation> com seu próprio tipo como uma de interagir qualquer classe que satisfaz o requisito acima pode ser usado para gerar a função max específica para essa classe.

Outras dicas

Eu sempre acho que um 'tipo' como um termo genérico para 'classes' e 'primitivos'.

int foo; // Type is int, class is nonexistent.

MyClass foo; // Type is MyClass, class is MyClass

Inspirado pela Wikipedia ...

teoria tipo termos;

  • A tipo é uma interface abstrata.
    Tipos geralmente representam substantivos, como uma pessoa, lugar ou coisa, ou algo nominalizado,

  • A class representa uma implementação do tipo.
    É uma estrutura de dados concretos e coleção de sub-rotinas

    classes concretas diferentes podem produzir objetos do mesmo tipo abstrato (dependendo do tipo de sistema).

    * Por exemplo, pode-se implementar o tipo Stack com dois aulas : SmallStack (rápido para pilhas pequenas, mas escalas mal) e ScalableStack (escalas bem, mas de alta aéreos para pequenas pilhas). *

    Da mesma forma, uma dada classe pode ter vários diferentes construtores .

enter descrição da imagem aqui

O exemplo de banana.

  • A Banana tipo representaria as propriedades e funcionalidades de bananas em geral.

  • O ABCBanana e XYZBanana aulas representaria formas de bananas produtoras.
    (fornecedores de bananas diferentes na vida real, ou estruturas de dados e funções diferentes para representar e desenhar bananas em um jogo de vídeo).

    A classe ABCBanana poderia, então, produzir bananas particulares que são casos do ABCBanana class , eles seriam objetos de tipo Banana .

Não é raro o programador fornecer uma implementação única e somente para um tipo. Neste caso, a classe nome é frequentemente idêntico ao nome do tipo . Mas ainda há um tipo (que podem ser extraídos em uma interface se necessário), e uma implementação (que implementar a interface separado) que constrói instâncias (objetos) da classe.

Type é o termo genérico para todos os modelos de objetos disponíveis ou conceitos. Uma classe é um tal modelo de objecto. Assim é o tipo de estrutura, o tipo Integer, do tipo de interface etc. Estes são todos os tipos

Se você quiser, você pode olhar para ele desta forma: Um tipo é o conceito pai. Todos os outros conceitos: classe, interface, estrutura, Integer etc herdar desta concept.i.e Eles são tipos

Tipo contém descrição dos dados (isto é, propriedades, operações, etc),

Class é um tipo específico - é um modelo para criar instâncias de objetos .

classe Estritamente falando é um conceito especial, pode ser visto como um pacote contendo subconjunto de metadados descrever alguns aspectos de um objeto.

Por exemplo, em C # pode encontrar interfaces e classes. Ambos são tipos, mas interface só pode definir algum contrato e não pode ser instanciado ao contrário de classes.

Simplesmente falando class é um tipo especializado usado para propriedades circunscrever e comportamento de um objeto.

Wikipedia pode dar-lhe uma resposta mais completa:

Para ilustrar a maneira mais rápida:

A estrutura é um tipo, mas uma estrutura não é uma classe.

Como você pode ver, um tipo é um termo "abstrato", não só para definições de classes, mas também estruturas e tipos de dados primitivos como float, int, bool.

Tipo é conceitualmente um super-classe. No sentido mais amplo, uma classe é uma forma de tipo.

Intimamente relacionado com as aulas são interfaces, que podem ser vistas como um tipo muito especial de classe - puramente abstrato. Estes também são tipos.

para as classes "tipo" abrange, interfaces e na maioria das primitivas línguas também. Também plataformas como o CLR dot-net tem tipos de estrutura também.

Meus pensamentos estão praticamente em linha com a resposta de Aku.

Eu vejo aulas como um modelo para a construção de objetos, enquanto os tipos são uma forma de classificar os objetos, e nos fornecer uma interface para eles.

Python também adiciona metaclasses, que são apenas um mecanismo para aulas de construir, da mesma forma como aulas de construir objetos (e bem, classes e metaclasses são ambos objetos).

Este resposta à mesma pergunta em lamba o máximo parece me como uma explicação perfeita.

Tomado da citação GoF abaixo:

É uma objetos Class define como o objeto é implementado classe .A define o estado interno do objecto e a implementação do seu operações.

Em contraste, um de objetos tipo refere-se apenas à sua -a de interface conjunto de solicitações a que pode responder.

Eu quero dar um exemplo usando Java:

public interface IType {
}

public class A implements IType {
public A{};
}

public class B implements IType {
public B{};
}

Ambas as classes A e B implementar a interface e, portanto, são do tipo IType. Além disso, em Java, ambas as classes produzir seu próprio tipo (respectivamente para o seu nome da classe). Assim, o A classe é do tipo A e IType eo B classe é do tipo B e IType satisfazendo:

Um objeto pode ter muitos tipos, e objetos de diferentes classes podem têm o mesmo tipo.

A diferença entre subtipos e subclasse provavelmente ajuda a entender essa questão assim:

https: //www.cs.princeton. edu / cursos / archive / fall98 / cs441 / mainus / node12.html

Para adicionar mais um exemplo da distinção:. Em C ++ você tem ponteiro e referência tipos que pode se referir a classes, mas não são classes em si

Bar b; // b is of type "class Bar"
Bar *b2 = &b; // b2 is of type "pointer to Class Bar"
Bar &b3 = b; // b3 is of type "reference to Class Bar"
Bar *b4[7]; // b4 is of type "7-element array of pointers to Class Bar"
Bar ***b5; //b5 is of type "pointer to a pointer to a pointer to Class Bar"

Note que apenas uma classe está envolvido, mas um número quase infinito de tipos pode ser usado. Em alguns idiomas, função são considerados "de primeira classe-objetos", caso em que, o tipo de função é uma classe. Em outros, o tipo de uma função é meramente um ponteiro. As aulas têm, geralmente, os conceitos de ser capaz de armazenar dados, bem como as operações em que os dados.

Eu acho que de um tipo como sendo o conjunto de coisas que você pode fazer com um valor particular. Por exemplo, se você tem um valor inteiro, você pode adicioná-la a outros números inteiros (ou realizar outras operações aritméticas), ou passá-lo para funções que aceitam um argumento inteiro. Se você tem um valor de objeto, você pode chamar métodos em que são definidas por sua classe.

Porque uma classe define o que você pode fazer com objetos dessa classe, uma classe define um tipo. Uma classe é mais do que isso, porém, uma vez que também fornece uma descrição de como os métodos são implementados (algo não implícito do tipo) e como os campos do objeto são colocados para fora.

Note também que o valor do objeto só pode ter uma classe, mas pode ter vários tipos, uma vez que cada superclasse fornece um subconjunto da funcionalidade disponível na classe do objeto.

Assim, embora objetos e tipos estão intimamente relacionados, eles não são realmente a mesma coisa.

Tipo geralmente refere-se à classificação dos valores primitivos -. Inteiros, strings, arrays, booleans, null, etc. Normalmente, você não pode criar novos tipos

Classe refere-se ao conjunto chamado de propriedades e métodos que um objecto está associado com quando é criado. Normalmente você pode definir quantas novas classes como você quer, embora alguns idiomas que você tem que criar um novo objeto e, em seguida, anexar métodos a ele.

Esta definição é principalmente verdade, mas algumas línguas têm tentado combinar tipos e classes de várias maneiras, com vários resultados benéficos.

Tipos e classes estão relacionadas mas não idênticas. Minha opinião é que as classes são usadas para a herança de implementação, enquanto que tipos são usados ??para substituição de tempo de execução.

Aqui é um link explicando a princípio da substituição e por subclasses e subtipos nem sempre são a mesma coisa (em Java, por exemplo). A wikipedia página sobre covariância e contravariance tem mais informações sobre esta distinção.

É uma pergunta interessante. Eu acho que a resposta do aku no local. Tome a classe java ArrayList como exemplo

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

Uma instância da classe ArrayList é dito ser do tipo de cada superclasse estende-se e cada interface que ele implementa. Portanto, uma instância da classe ArrayList tem um ArrayList tipo, RandomAccess, Cloneable, e assim por diante. Em outras palavras, valores (ou instâncias) pertencem a um ou mais tipos, classes definem o que estes tipos são.

Diferentes classes podem descrever o mesmo tipo.

Tipo consiste das seguintes partes:

  1. Operações = sintaxe
  2. Descrição das operações = semântica

Class consiste das seguintes partes:

  1. Operações = sintaxe
  2. Implementação (= várias implementações descrever mesma semântica)

Algumas notas:

  • Interface (como em Java) não é tipo, porque não descreve a semântica (descreve apenas sintaxe)

  • subclasse não é subtipo, porque subclasse pode alterar a semântica definida na superclasse, subtipo não pode semântica mudança supertipo (veja substituição de Liskov, por exemplo, neste exemplo LSP ).

Obviamente, uma vez que existem línguas com sistema de tipos que não são linguagens de programação OO, tipo deve ser um conceito mais amplo do que o class

Mesmo em linguagens como Java, int é um tipo (primitiva), mas não uma classe.

Assim:. Cada classe é um tipo, mas não todo o tipo é uma classe

Se pensarmos a esta questão no contexto C #, chegamos a resposta abaixo.

C sistema # tipo é dividido em categorias seguintes:

tipos Valor:

  • Tipos simples: como int, long, float, etc.
  • tipos Enum
  • tipos Struct
  • tipos anuláveis ??

Tipos de referência:

  • Tipos de classe
  • tipos de interface
  • tipos array
  • tipos de delegado

Como você pode ver, existem muitos tipos em C # que classe é apenas um deles. Há apenas uma observação importante: sistema de tipo C #’s é unificado de tal modo que um valor de qualquer tipo pode ser tratada como um objecto. Cada tipo em C # directa ou indirectamente deriva o tipo de classe de objecto, e o objecto é a classe base de todos os tipos. Valores de tipos de referência são tratadas como objectos simplesmente através da visualização dos valores como tipo de objecto. Valores de tipos de valor são tratados como objetos através da realização de operações de boxing e unboxing.

modo como vejo, tipo é um guarda-chuva ao longo de muitos itens que classe é um deles.

Referece: CSahrp Language Specification doc, página 4

Em linguagem agnóstico geral sentido -. Class é um realização do Tipo

Muitas vezes, quando esta é a única realização desse tipo, você pode usar ambos os termos para referenciá-lo em algum contexto.

Ao contrário, por exemplo, em C contexto # - Class é apenas um do muitos mais implementações de um strong> Tipo como primitivas, estruturas, ponteiros etc.

Esta foi uma boa pergunta para mim, o que me fez pensar muito. Atrevo-me a dizer que classe é uma coisinha compiletime e Tipo é uma coisinha de tempo de execução. Digo isto porque você escreve classes não tipos. O compilador cria tipos de classes e os tipos de uso de tempo de execução para criar instâncias de objetos.

Tipos em C, como Int flutuador, char etc definir dados que pode ser actuado com métodos específicos que podem operar em cima delas. Não é mais complicado do que isso. Como por int I pode adicionar, subtrair multiplicar e talvez dividir. Esses são os meus métodos (ou operações) para int. Uma classe é simplesmente uma definição de um novo tipo. I primeiro definir o que os olhares de dados semelhante. Talvez seja um único bit. Talvez seja duas palavras como um complexo com uma parte real e imaginária. Ou talvez a sua esta coisa complexo com 309734325 bytes representando a composição atômica de uma partícula estranha em Júpiter. Eu não me importo. Assim como um inteiro, eu começo a fazer as operações que eu posso fazer com este novo tipo de dados. No caso do número inteiro eu tinha somar, subtrair, etc. Com este novo tipo de dados posso definir o que quer que as operações eu acho que faz sentido. Eles podem ser adicionar subtrair etc. mas eles podem adicionar outras coisas. Estes são quaisquer métodos que eu decidir adicionar à minha classe.

A linha inferior é que, com um tipo em C, você tem uma definição do que os dados são, ie; um byte, word, flutuador, char etc. Mas qualquer um destes também implica que as operações são legais e irá produzir resultados confiáveis.

A classe não é diferente, exceto que é até você para definir a interface e operações aceitáveis. A classe define essas coisas e quando você instancia-lo em um objeto que define o comportamento do objeto, assim como uma definição de tipo define o comportamento de um inteiro quando você operá-lo.

Classes apenas dar-lhe a flexibilidade para definir novos tipos e tudo sobre como eles funcionam.

Assim que isso for definido, cada vez que eu instanciar um objeto da classe "coisinha", que tem a estrutura de dados I definido e as operações (métodos) que eu disse que você pode fazer com ele. A classe "coisinha" é claramente nada mais nada menos do que um novo tipo que C ++ permite-me definir.

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