Object Pascal: diferenças entre revisões
Aspeto
Conteúdo apagado Conteúdo adicionado
m Bot: Adicionando: ar:أوبجكت باسكال |
m Correção. |
||
(Há 33 revisões intermédias de 19 utilizadores que não estão a ser apresentadas) | |||
Linha 1: | Linha 1: | ||
{{sem fontes|data=fevereiro de 2014}} |
|||
<br> |
|||
{{Info/Linguagem de computador |
{{Info/Linguagem de computador |
||
|nome = Object Pascal |
|nome = Object Pascal |
||
Linha 7: | Linha 9: | ||
|ano = |
|ano = |
||
|ultima_versao = |
|ultima_versao = |
||
|ultima_data = |
|ultima_data = 07 de fevereiro |
||
|criador = [[Niklaus Wirth]] e [[Apple Inc.]] |
|criador = [[Niklaus Wirth]] e [[Apple Inc.]] |
||
|tipagem = [[Tipo de dado#Tipo estático e dinâmico|Dinâmica e Estática]], [[Tipo de dado#Tipo forte e fraco|Forte]] |
|tipagem = [[Tipo de dado#Tipo estático e dinâmico|Dinâmica e Estática]], [[Tipo de dado#Tipo forte e fraco|Forte]] |
||
|compiladores = |
|compiladores = |
||
|dialetos = [[ |
|dialetos = Apple Object Pascal, [[Turbo Pascal]], objfpc, [[Embarcadero Delphi|Delphi]], [[Delphi.NET]], [[Oxygene]] |
||
|influenciada_por = [[Pascal (linguagem de programação)|Pascal]], [[Smalltalk]] |
|influenciada_por = [[Pascal (linguagem de programação)|Pascal]], [[Smalltalk]] |
||
|influenciou = [[C Sharp|C#]], [[Java (linguagem de programação)|Java]] |
|influenciou = [[C Sharp|C#]], [[Java (linguagem de programação)|Java]] |
||
|licença = |
|licença = |
||
|extensão = .pas, .p, .pp |
|||
|website = |
|website = |
||
}} |
}} |
||
'''Object Pascal''' é uma ramificação de [[Linguagem de programação|linguagens]] derivativas de [[Pascal (linguagem de programação)|Pascal]], com suporte a [[orientação a objetos]]. |
'''Object Pascal''' é uma ramificação de [[Linguagem de programação|linguagens]] derivativas de [[Pascal (linguagem de programação)|Pascal]], com suporte a [[orientação a objetos]]. As principais ferramentas para programar em Object Pascal são o [[Ambiente de desenvolvimento integrado|IDE]] [[Embarcadero Delphi]] e o [[Lazarus (ADI)|Lazarus]]. Foi usada nas sete primeiras versões do ambiente Delphi. Depois, foi substituído por uma versão também chamada de Delphi. |
||
== Programa Olá Mundo == |
|||
Foi usada nas sete primeiras versões do ambiente Delphi. Depois, foi substituído por uma versão chamda também de Delphi. |
|||
Compatível com [[Embarcadero Delphi|Delphi]] e [[Free Pascal]]. |
|||
<syntaxhighlight lang="pascal"> |
|||
== Tipos de polimorfismo em Object Pascal == |
|||
program ObjectPascalExample; |
|||
Por fazer parte do paradigma orientado à objetos, Object Pascal tem suporte ao [[polimorfismo]]. Segundo o artigo de Cardelli e Wegner sobre a definição dos tipos de [[polimorfismo]], segue como a linguagem implementa cada tipo: |
|||
type |
|||
; Polimorfismo ad hoc por [[sobrecarga]](overloading): |
|||
THelloWorld = class |
|||
procedure Put; |
|||
end; |
|||
procedure THelloWorld.Put; |
|||
Para que um determinado método de uma classe possa ser sobrecarregado em Object Pascal, é necessário usar o modificador overload, assim o compilador diferencia os métodos sobrecarregados por sua assinatura: |
|||
begin |
|||
Writeln('Hello, World!'); |
|||
end; |
|||
var |
|||
type |
|||
HelloWorld: THelloWorld; { isso é um ponteiro implícito } |
|||
TAlgumaClasse = class |
|||
procedure UmMetodo(I: Integer); overload; |
|||
procedure UmMetodo(S: string); overload; |
|||
procedure UmMetodo(D: Double); overload; |
|||
end; |
|||
begin |
|||
; Polimorfismo ad hoc por Coerção: |
|||
HelloWorld := THelloWorld.Create; { construtor retorna ponteiro } |
|||
HelloWorld.Put; |
|||
HelloWorld.Free; { essa linha libera o espaço de memória que contém o objeto (destrói o objeto) } |
|||
end. |
|||
</syntaxhighlight> |
|||
== Ver também == |
|||
Em Object Pascal pode existir coerção automática. A coerção automática ocorre quando o compilador converte o tipo de uma variável em outra para realizar uma operação: |
|||
* [[Embarcadero Delphi]] |
|||
* [[Pascal (linguagem de programação)]] |
|||
* [[Window Object Library]] |
|||
* [[Lazarus (ADI)|Lazarus]] |
|||
{{Linguagens de programação}} |
|||
procedure TForm1.Button1Click(Sender: TObject); |
|||
var |
|||
b : Integer; |
|||
a : LongInt; |
|||
begin |
|||
a := 3000; |
|||
b := a; |
|||
ShowMessage( IntToStr( b ) ); |
|||
end; |
|||
{{Esboço-programação}} |
|||
Neste exemplo o número 3000 será mostrado. |
|||
; Polimorfismo Universal Paramétrico: |
|||
Polimorfismo Universal Paramétrico foi introduzido com o nome de Generics inicialmente na Versão Delphi2007.NET e apenas para programas da plataforma .NET. Posteriormente foi introduzido na plataforma Delphi Win32 na versão 2009 da IDE.<br /> |
|||
Com Generics é possível parametrizar Classes, Interfaces, records e até mesmo métodos e ao invés de estar passando um valor nesse parâmetro, estamos passando um ''tipo''.<br /> |
|||
Ilustrado aqui uma declaração utilizando Generics em Delphi 2009 win32: |
|||
type |
|||
TList<T> = class(TEnumerable<T>) |
|||
// … |
|||
public |
|||
// … |
|||
function Add(const Value: T): Integer; |
|||
procedure Insert(Index: Integer; const Value: T); |
|||
function Remove(const Value: T): Integer; |
|||
procedure Delete(Index: Integer); |
|||
procedure DeleteRange(AIndex, ACount: Integer); |
|||
function Extract(const Value: T): T; |
|||
procedure Clear; |
|||
property Count: Integer read FCount write SetCount; |
|||
property Items[Index: Integer]: T read GetItem write SetItem; default; |
|||
end; |
|||
Esse código de TList<T> possibilita um conjunto de possíveis classes com apenas um código. |
|||
Existem maneiras de simular o comportamento de Generics em versões anteriores do compilador de Object Pascal utilizando comandos de compilador para conseguir resultados parecidos com os Templates de C++.<ref name="newftrs">{{cite web|title=Templates in Object Pascal|publisher=Embarcadero|url=http://edn.embarcadero.com/article/27603|accessdate=2009-11-02}}</ref> |
|||
; Polimorfismo Universal por Inclusão: |
|||
Esse tipo de polimorfismo se dá através de um mecanismo de inclusão faz com que as classes se relacionem de maneira polimórfica. No Object Pascal esse mecanimso de inclusão é o de subTipo assim como no Java.<br /> |
|||
Isso garante que duas classes distintas (mas dentro de uma hierarquia) possam ser manipuladas através de um tipo mais abstrato e comum entre elas. |
|||
Exemplo de Polimorfismo por Inclusão: |
|||
TClasse = class(TObject) |
|||
mensagem : String; |
|||
private |
|||
public |
|||
function getMensagem : String; |
|||
procedure setMensagem(x : String); |
|||
end; |
|||
//… |
|||
TClasseFilha1 = class(TClasse) |
|||
private |
|||
public |
|||
end; |
|||
//… |
|||
TClasseFilha2 = class(TClasse) |
|||
private |
|||
public |
|||
end; |
|||
//… |
|||
//Implementação dos getters setters omitida.... |
|||
//uso |
|||
procedure TForm1.Button1Click(Sender: TObject); |
|||
var |
|||
varClasseMae : TClasse; |
|||
varClasseFilha1 : TClasseFilha1; |
|||
varClasseFilha2 : TClasseFilha2; |
|||
begin |
|||
varClasseFilha1 := TClasseFilha1.Create; |
|||
varClasseFilha1.setMensagem('Filha1! yahooo!'); |
|||
varClasseFilha2 := TClasseFilha2.Create; |
|||
varClasseFilha2.setMensagem('Filha2! eeeepa!'); |
|||
… |
|||
varClasseMae := varClasseFilha1; |
|||
ShowMessage( varClasseMae.getMensagem ); |
|||
varClasseMae := varClasseFilha2; |
|||
ShowMessage( varClasseMae.getMensagem ); |
|||
end; |
|||
{{Ref-section|col=2}} |
|||
== {{Ver também}} == |
|||
* [[CodeGear Delphi]] |
|||
* [[Pascal (linguagem de programação)]] |
|||
{{Esboço-programação}} |
|||
{{Linguagens de programação}} |
|||
{{Sem imagem}} |
{{Sem imagem}} |
||
{{Controle de autoridade}} |
|||
[[Categoria:Linguagens de programação]] |
|||
[[Categoria:Linguagens de programação orientadas a objetos]] |
|||
[[ar:أوبجكت باسكال]] |
|||
[[cs:Object Pascal]] |
|||
[[da:Object Pascal]] |
|||
[[en:Object Pascal]] |
|||
[[eo:Objektema Paskalo]] |
|||
[[es:Object Pascal]] |
|||
[[fi:Object Pascal]] |
|||
[[fr:Object Pascal]] |
|||
[[ja:Object Pascal]] |
|||
[[ko:오브젝트 파스칼]] |
|||
[[ms:Object Pascal]] |
|||
[[nl:Object Pascal]] |
|||
[[pl:Object Pascal]] |
|||
[[ro:Object Pascal]] |
|||
[[ru:Object Pascal]] |
|||
[[sk:Object Pascal]] |
|||
[[sq:Object Pascal]] |
|||
[[sv:Object Pascal]] |
|||
[[tg:Object Pascal]] |
|||
[[th:ภาษาอ็อบเจกต์ปาสกาล]] |
|||
[[tr:Object Pascal]] |
|||
[[uk:Object Pascal]] |
|||
[[zh:Object Pascal]] |
Edição atual tal como às 00h17min de 14 de junho de 2021
Este artigo não cita fontes confiáveis. (Fevereiro de 2014) |
Object Pascal | |
---|---|
Paradigma | Programação estruturada, Programação imperativa, Orientação a objetos |
Última versão | (07 de fevereiro) |
Criado por | Niklaus Wirth e Apple Inc. |
Estilo de tipagem | Dinâmica e Estática, Forte |
Dialetos | Apple Object Pascal, Turbo Pascal, objfpc, Delphi, Delphi.NET, Oxygene |
Influenciada por | Pascal, Smalltalk |
Influenciou | C#, Java |
Extensão do arquivo | .pas, .p, .pp |
Object Pascal é uma ramificação de linguagens derivativas de Pascal, com suporte a orientação a objetos. As principais ferramentas para programar em Object Pascal são o IDE Embarcadero Delphi e o Lazarus. Foi usada nas sete primeiras versões do ambiente Delphi. Depois, foi substituído por uma versão também chamada de Delphi.
Programa Olá Mundo
[editar | editar código-fonte]Compatível com Delphi e Free Pascal.
program ObjectPascalExample;
type
THelloWorld = class
procedure Put;
end;
procedure THelloWorld.Put;
begin
Writeln('Hello, World!');
end;
var
HelloWorld: THelloWorld; { isso é um ponteiro implícito }
begin
HelloWorld := THelloWorld.Create; { construtor retorna ponteiro }
HelloWorld.Put;
HelloWorld.Free; { essa linha libera o espaço de memória que contém o objeto (destrói o objeto) }
end.
Ver também
[editar | editar código-fonte]