RESUMO DA AULA, CRIBS
Информатика и информационные технологии. Совместимость типов объектов (конспект лекций) Diretório / Notas de aula, folhas de dicas Índice (expandir) AULA #11. Tipo de dados do objeto 1. Tipo de objeto em Pascal. O conceito de um objeto, sua descrição e uso Historicamente, a primeira abordagem à programação tem sido a programação procedural, também conhecida como programação bottom-up. Inicialmente, foram criadas bibliotecas comuns de programas padrão usados em vários campos de aplicação computacional. Então, com base nesses programas, foram criados programas mais complexos para resolver problemas específicos. No entanto, a tecnologia computacional estava em constante desenvolvimento, começou a ser usada para resolver vários problemas de produção, economia e, portanto, tornou-se necessário processar dados de vários formatos e resolver problemas não padronizados (por exemplo, não numéricos). Portanto, ao desenvolver linguagens de programação, eles começaram a prestar atenção à criação de vários tipos de dados. Isso contribuiu para o surgimento de tipos de dados complexos como combinados, múltiplos, string, arquivo, etc. Antes de resolver o problema, o programador realizou a decomposição, ou seja, dividiu a tarefa em várias subtarefas, para cada uma das quais foi escrito um módulo separado . A principal tecnologia de programação incluiu três etapas: 1) projeto de cima para baixo; 2) programação modular; 3) codificação estrutural. Mas a partir de meados dos anos 60 do século XX, novos conceitos e abordagens começaram a se formar, que formaram a base da tecnologia de programação orientada a objetos. Nesta abordagem, a modelagem e descrição do mundo real é realizada no nível de conceitos de uma área temática específica à qual o problema a ser resolvido pertence. A programação orientada a objetos é uma técnica de programação que se assemelha muito ao nosso comportamento. É uma evolução natural de inovações anteriores no design de linguagem de programação. A programação orientada a objetos é mais estrutural do que todos os desenvolvimentos anteriores em relação à programação estruturada. Também é mais modular e mais abstrato do que as tentativas anteriores de abstração de dados e detalhes de programação internamente. Uma linguagem de programação orientada a objetos é caracterizada por três propriedades principais: 1) Encapsulamento. A combinação de registros com procedimentos e funções que manipulam os campos desses registros forma um novo tipo de dado - um objeto; 2) Herança. Definição de um objeto e seu uso posterior para construir uma hierarquia de objetos filho com a capacidade de cada objeto filho relacionado à hierarquia acessar o código e os dados de todos os objetos pai; 3) Polimorfismo. Dando a uma ação um único nome, que é então compartilhado para cima e para baixo na hierarquia de objetos, com cada objeto na hierarquia executando essa ação de uma forma adequada. Falando do objeto, apresentamos um novo tipo de dado - o objeto. Um tipo de objeto é uma estrutura que consiste em um número fixo de componentes. Cada componente é um campo contendo dados de um tipo estritamente definido ou um método que executa operações em um objeto. Por analogia com a declaração de variáveis, a declaração de um campo especifica o tipo de dado desse campo e o identificador que nomeia o campo: por analogia com a declaração de um procedimento ou função, a declaração de um método especifica o título de um procedimento, função, construtor ou destruidor. Um tipo de objeto pode herdar componentes de outro tipo de objeto. Se o tipo T2 herdar do tipo T1, o tipo T2 será filho do tipo T1 e o próprio tipo T1 será pai do tipo T2. A herança é transitiva, ou seja, se TK herda de T2 e T2 herda de T1, então TK herda de T1. O escopo (domínio) de um tipo de objeto consiste em si mesmo e em todos os seus descendentes. O código-fonte a seguir é um exemplo de uma declaração de tipo de objeto, tipo tipo ponto = objeto X, Y: inteiro; end; Rect = objeto A, B: Ponto T; procedimento Init(XA, YA, XB, YB: Inteiro); procedimento Copiar(var R: TRectangle); procedimento Move(DX, DY: Inteiro); procedimento Grow(DX, DY: Inteiro); procedimento Intersect(var R: TRectangle); procedimento União(var R: TRectangle); função Contém(P: Ponto): Booleano; end; StringPtr = ^String; CampoPtr = ^TField; TField = objeto X, Y, Len: inteiro; Nome: StringPtr; construtor Copiar(var F: TField); construtor Init(FX, FY, FLen: Integer; FName: String); destruidor Feito; virtual; procedimento de exibição; virtual; procedimento Editar; virtual; função GetStr: String; virtual; função PutStr(S: String): Booleano; virtual; end; StrFieldPtr = ^TStrCampo; StrField = objeto(TField) Valor: PString; construtor Init(FX, FY, FLen: Integer; FName: String); destruidor Feito; virtual; função GetStr: String; virtual; função PutStr(S: String): Booleano; virtual; função Get:string; procedimento Put(S: String); end; NumFieldPtr = ^TNumField; TNumField = objeto(TField) privado Valor, Min, Max: Longint; público construtor Init(FX, FY, FLen: Integer; FName: String; FMin, FMax: Inteiro longo); função GetStr: String; virtual; função PutStr(S: String): Booleano; virtual; função Get: Longint; função Put(N: Longint); end; ZipFieldPtr = ^TZipField; ZipField = objeto(TNumField) função GetStr: String; virtual; função PutStr(S: String): Booleano; virtual; final. Ao contrário de outros tipos, os tipos de objeto só podem ser declarados na seção de declaração de tipo no nível mais externo do escopo de um programa ou módulo. Assim, os tipos de objeto não podem ser declarados em uma seção de declaração de variável ou dentro de um bloco de procedimento, função ou método. Um tipo de componente de tipo de arquivo não pode ter um tipo de objeto ou qualquer tipo de estrutura contendo componentes de tipo de objeto. 2. Herança O processo pelo qual um tipo herda as características de outro tipo é chamado de herança. O descendente é chamado de tipo derivado (filho) e o tipo do qual o tipo filho herda é chamado de tipo pai (pai). Os tipos de registro Pascal conhecidos anteriormente não podem herdar. No entanto, o Borland Pascal estende a linguagem Pascal para suportar herança. Uma dessas extensões é uma nova categoria de estrutura de dados relacionada a registros, mas muito mais poderosa. Os tipos de dados nesta nova categoria são definidos usando a nova palavra reservada "objeto". Um tipo de objeto pode ser definido como um tipo completo e independente na maneira de descrever entradas em Pascal, mas também pode ser definido como um descendente de um tipo de objeto existente colocando o tipo pai entre parênteses após a palavra reservada "objeto". 3. Instanciar Objetos Uma instância de um objeto é criada declarando uma variável ou constante de um tipo de objeto, ou aplicando o procedimento padrão New a uma variável do tipo "ponteiro para tipo de objeto". O objeto resultante é chamado de instância do tipo de objeto; var F: Tcampo; Z: TZipField; FP: PFcampo; ZP: PZipField; Dadas essas declarações de variáveis, F é uma instância de TField e Z é uma instância de TZipField. Da mesma forma, após aplicar New a FP e ZP, FP apontará para uma instância TField e ZP apontará para uma instância TZipField. Se um tipo de objeto contém métodos virtuais, as instâncias desse tipo de objeto devem ser inicializadas chamando um construtor antes de chamar qualquer método virtual. Abaixo segue um exemplo: var S: StrField; por exemplo S.Init(1, 1, 25, 'Primeiro nome'); S.Put('Vladimir'); S.Exibir; ... S Feito; final. Se S.Init não foi chamado, chamar S.Display fará com que este exemplo falhe. A atribuição de uma instância de um tipo de objeto não implica a inicialização da instância. Um objeto é inicializado pelo código gerado pelo compilador que é executado entre a invocação do construtor e o ponto em que a execução realmente atinge a primeira instrução no bloco de código do construtor. Se a instância do objeto não for inicializada e a verificação de intervalo estiver habilitada (pela diretiva {SR+}), a primeira chamada para o método virtual da instância do objeto apresentará um erro em tempo de execução. Se a verificação de intervalo estiver desabilitada (pela diretiva {SR-}), a primeira chamada para um método virtual de um objeto não inicializado pode levar a um comportamento imprevisível. A regra de inicialização obrigatória também se aplica a instâncias que são componentes de tipos struct. Por exemplo: var Comentário: array [1..5] de TStrField; I: inteiro começar para I := 1 a 5 faça Comentário [I].Init (1, I + 10, 40, 'first_name'); . . . for I := 1 a 5 do Comentário [I].Done; end; Para instâncias dinâmicas, a inicialização geralmente é sobre o posicionamento e a limpeza é sobre a exclusão, que é obtida por meio da sintaxe estendida dos procedimentos padrão Novo e Descartar. Por exemplo: var SP: StrFieldPtr; começar New(SP, Init(1, 1, 25, 'nome_nome'); SP^.Put('Vladimir'); SP^.Exibir; . . . Descarte (SP, Feito); final. Um ponteiro para um tipo de objeto é uma atribuição compatível com um ponteiro para qualquer tipo de objeto pai, portanto, em tempo de execução, um ponteiro para um tipo de objeto pode apontar para uma instância desse tipo ou para uma instância de qualquer tipo filho. Por exemplo, um ponteiro do tipo ZipFieldPtr pode ser atribuído a ponteiros do tipo PZipField, PNumField e PField e, em tempo de execução, um ponteiro do tipo PField pode ser nil ou apontar para uma instância de TField, TNumField ou TZipField, ou qualquer instância de um tipo filho de TField. Essas regras de compatibilidade de ponteiro de atribuição também se aplicam a parâmetros de tipo de objeto. Por exemplo, o método TField.Cop pode receber instâncias de TField, TStrField, TNumField, TZipField ou qualquer outro tipo filho de TField. 4. Componentes e Escopo O escopo de um identificador de bean vai além do tipo de objeto. Além disso, o escopo de um identificador de bean se estende pelos blocos de procedimentos, funções, construtores e destruidores que implementam os métodos do tipo de objeto e seus descendentes. Com base nessas considerações, a grafia do identificador do componente deve ser exclusiva no tipo de objeto e em todos os seus descendentes, bem como em todos os seus métodos. O escopo do identificador de componente descrito na parte privada da declaração de tipo é limitado ao módulo (programa) que contém a declaração de tipo de objeto. Em outras palavras, os beans identificadores privados agem como identificadores públicos comuns dentro do módulo que contém a declaração do tipo de objeto, e fora do módulo quaisquer beans e identificadores privados são desconhecidos e inacessíveis. Ao colocar tipos de objetos relacionados no mesmo módulo, você pode ter certeza de que esses objetos podem acessar os componentes privados uns dos outros, e esses componentes privados serão desconhecidos para outros módulos. Em uma declaração de tipo de objeto, um cabeçalho de método pode especificar os parâmetros do tipo de objeto que está sendo descrito, mesmo que a descrição ainda não esteja completa. Autor: Tsvetkova A.V. << Voltar: Tipo de dados do objeto (Tipo de objeto em Pascal. O conceito de objeto, sua descrição e uso. Herança. Criação de instâncias de objetos. Componentes e escopo) >> Encaminhar: Compatibilidade do tipo de objeto (Encapsulamento. Objetos extensíveis. Compatibilidade de tipo de objeto) Recomendamos artigos interessantes seção Notas de aula, folhas de dicas: ▪ Imunologia geral e clínica. Notas de aula Veja outros artigos seção Notas de aula, folhas de dicas. Leia e escreva útil comentários sobre este artigo. Últimas notícias de ciência e tecnologia, nova eletrônica: A existência de uma regra de entropia para o emaranhamento quântico foi comprovada
09.05.2024 Mini ar condicionado Sony Reon Pocket 5
09.05.2024 Energia do espaço para Starship
08.05.2024
Outras notícias interessantes: ▪ Nanopartículas controlam a imunidade ▪ A capacidade dos discos ópticos aumentará drasticamente ▪ Blu-rays de camada dupla agora disponíveis Feed de notícias de ciência e tecnologia, nova eletrônica
Materiais interessantes da Biblioteca Técnica Gratuita: ▪ seção do site Consumer Electronics. Seleção de artigos ▪ artigo Espessante caseiro. Dicas para o dono da casa ▪ artigo Como você encontrou o localizador em morcegos? Resposta detalhada ▪ artigo de Sabadilla. Lendas, cultivo, métodos de aplicação ▪ artigo Acústica frontal: pódios. Enciclopédia de rádio eletrônica e engenharia elétrica ▪ artigo Ratinho com parentes grandes. experimento físico
Deixe seu comentário neste artigo: Todos os idiomas desta página Página principal | Biblioteca | Artigos | Mapa do Site | Revisões do site www.diagrama.com.ua |