Escolar Documentos
Profissional Documentos
Cultura Documentos
cba
aos herdados
• Qualquer subclasse de uma classe abstrata a ser instanciada deve
fornecer implementações (definições) para todos os métodos
abstratos herdados
A adição de 7 a uma variável chamada x ocorre pelo envio do
objeto 7 como um parâmetro para o método + do objeto x.
devido a existência
das duas abordagens
(estruturados)
; a mistura de tipos
pode ser um problema, o que exige classes wrapper
. Manter a mesma quantidade e tipo de parâmetros e de retorno
para métodos sobrescritos e sobrescrevedores garante a conformidade
display
Implicitamente ou explicitamente?
usando um coletor de lixo
C++ não inclui recuperação de armazenamento implícita
, pode ser autocontida
class base_class {
private:
int a;
float x;
protected:
int b;
float y;
public:
int c;
float z; class subclass_1 : public base_class { ... };
}; class subclass_2 : private base_class { ... };
Aninhamento de classes
Construtor chama implicitamente
o construtor da classe base
É preciso reexportar empty,
pois ele se tornará privado
• Smalltalk é desprovida de tipos, todo o código é genérico; C++ usa templates
como possibilidade de códigos genéricos
myArray.add(new Integer(10)); myArray.add(10);
Integer é a classe wrapper para int aqui é feito um autoboxing
não é
(arquivos, por exemplo)
ou ainda ser derivada de outra e implementar uma interface, o que toma o
lugar de uma segunda classe pai
• Uma instância de uma classe aninhada pode existir apenas dentro de uma
instância de sua aninhadora
• Aderência mais consistente aos princípios de orientação a objetos
do que C++
. Exemplo: base.Draw();
A definição é feita em um pacote
separado para permitir compilação
independente
package Base_Pkg is
type T is abstract tagged null record;
procedure Do_It (A : T) is abstract;
end Base_Pkg;
• Também é possível definir ponteiros polimórficos
type Any_Person_Ptr is access Person'class;
e destrutores
, assim como em Smalltalk
vtable de B
código para
Registro de ponteiro para vtable area de A
instância de código para
classe para B a
draw de B
b código para
sift de B
c
C herda a e init() de A
C redefine fun() de A
C herda b e sum() de B
C define c e dud()
Aqui está incluída a
visão para A e C