Programação orientada a objetos: conceitos, pilares e exemplos

Programação orientada a objetos: entenda classes, objetos, os quatro pilares da POO e os principais conceitos cobrados em concursos de TI.

Por
Publicado em
16 min. de leitura

Fala aí, Padawan! A programação orientada a objetos está presente no desenvolvimento de sistemas e no conteúdo de concursos públicos de Tecnologia da Informação. Para entender esse assunto, precisamos conectar os conceitos à prática: como representar um aluno, controlar um empréstimo ou organizar as funcionalidades de um sistema? Neste artigo, você aprenderá como classes e objetos trabalham juntos, conhecerá os quatro pilares da POO e acompanhará exemplos em Java e Python.

O que é programação orientada a objetos?

A programação orientada a objetos, conhecida como POO, é um paradigma de programação que organiza o software em torno de objetos. Um paradigma é uma maneira de estruturar o raciocínio e a construção de programas. Na POO, os objetos reúnem dados e comportamentos relacionados.

Imagine um sistema de biblioteca. Ele pode conter objetos que representam livros, leitores e empréstimos. Um livro possui informações, como título e autor; um empréstimo pode oferecer operações, como registrar a devolução e verificar se existe atraso. O sistema funciona pela colaboração entre esses objetos.

Essa modelagem não precisa reproduzir cada detalhe do mundo real. O objetivo é representar aquilo que importa para o problema. Em uma biblioteca, pode ser necessário conhecer a matrícula do leitor, mas provavelmente não sua altura. Também existem objetos que representam elementos técnicos, como conexões com bancos de dados e serviços de envio de mensagens.

Classes, objetos, atributos e métodos

Uma classe define a estrutura e os comportamentos de determinado tipo de objeto. Podemos imaginar a classe Livro como uma descrição que estabelece quais informações e operações os livros do sistema terão.

Um objeto é uma instância de uma classe, ou seja, uma ocorrência concreta criada a partir dessa definição. Dois objetos da classe Livro podem ter títulos diferentes e estados independentes: um exemplar pode estar disponível, enquanto outro está emprestado.

Os atributos representam dados associados ao objeto, como titulo, autor e disponivel. Os métodos representam operações, como emprestar() e devolver(). Um método pode consultar informações, modificar o estado do objeto ou colaborar com outros objetos.

ElementoSignificadoExemplo
ClasseDefine um tipo de objetoLivro
ObjetoInstância concreta de uma classeUm exemplar cadastrado
AtributoInformação associada ao objetotitulo
MétodoOperação oferecida pelo objetoemprestar()
ConstrutorParticipa da inicialização da instância. É um método específico para criar o objeto configurá-loLivro(“Dom Casmurro”)

O construtor estabelece o estado inicial de um objeto. Em Java, ele tem o mesmo nome da classe e não declara tipo de retorno, nem mesmo void. Pode receber informações e validar condições necessárias para que a instância comece sua existência em um estado válido.

Os quatro pilares da programação orientada a objetos

Na abordagem didática mais comum, a POO é apresentada por quatro pilares: abstração, encapsulamento, herança e polimorfismo. Eles ajudam a distribuir responsabilidades, proteger regras e permitir que diferentes partes do programa trabalhem em conjunto.

Abstração: representar o que importa

A abstração consiste em selecionar as características relevantes de algo e oferecer uma representação adequada ao problema. Em um sistema acadêmico, uma classe Aluno pode reunir matrícula, nome e situação da inscrição, deixando de fora características que não interferem nas funcionalidades.

A abstração também aparece na forma como usamos os objetos. Ao executar emprestimo.devolver(), o restante do sistema solicita uma operação sem precisar conhecer todos os passos internos para registrar a devolução. Abstração não é sinônimo de classe abstrata: a classe abstrata é apenas um dos recursos disponíveis para expressá-la.

Encapsulamento: controlar o acesso e preservar regras

Encapsulamento na programação orientada a objetos é a organização de dados e operações em uma unidade com uma interface de uso controlada. Isso permite esconder detalhes internos e proteger as regras que mantêm o objeto consistente.

Considere um livro emprestado. Se qualquer parte do programa puder alterar livremente sua disponibilidade, será fácil produzir situações incoerentes. Ao oferecer métodos como emprestar() e devolver(), a classe pode verificar se a operação faz sentido antes de alterar seu estado.

Encapsular vai além de declarar atributos privados e criar métodos de leitura e escrita. Um método de escrita que aceita qualquer valor pode comprometer as mesmas regras que o atributo privado deveria proteger. O importante é controlar quais operações são permitidas e sob quais condições.

Herança: especializar um tipo existente

A herança permite definir uma classe a partir de outra, estabelecendo uma relação entre um tipo mais geral e um tipo mais específico. Por exemplo, LivroDigital pode ser uma especialização de Publicacao, desde que respeite o comportamento esperado de uma publicação.

A classe mais geral é chamada de superclasse, e a mais específica, de subclasse. A herança pode permitir o reaproveitamento de comportamentos e sua especialização. Em Java, uma classe estende diretamente apenas uma classe, embora possa implementar várias interfaces. 

A relação deve fazer sentido como “é um”: um livro digital é uma publicação. Já uma biblioteca tem livros; nesse caso, o relacionamento entre objetos é uma alternativa mais adequada à herança. Usar herança apenas para aproveitar algumas linhas de código pode criar dependências difíceis de manter.

Polimorfismo: uma operação, diferentes comportamentos

O polimorfismo permite utilizar objetos de tipos diferentes por meio de uma abstração comum. No polimorfismo de subtipos, uma variável de um tipo mais geral pode referenciar objetos de tipos específicos, e cada objeto pode responder à mesma operação com seu próprio comportamento.

Imagine que LivroDigital e LivroImpresso ofereçam o método descricao(). Um sistema pode percorrer uma coleção de publicações e chamar esse método em todas elas. Cada objeto fornece a descrição correspondente ao seu tipo, sem que o código precise concentrar todas as diferenças em uma sequência de verificações.

O que é parâmetro em programação orientada a objetos?

Um parâmetro é uma variável declarada na definição de um método ou construtor para receber uma informação durante sua chamada. Em emprestar(String leitor), por exemplo, leitor é um parâmetro do tipo String.

O argumento é o valor efetivamente fornecido na chamada. Em emprestar(“Ana”), a expressão “Ana” é o argumento. A distinção é simples: o parâmetro aparece na declaração; o argumento aparece no uso. Esses conceitos também existem fora da programação orientada a objetos.

Parâmetros permitem que uma operação trabalhe com entradas diferentes. Um método renovar(int dias) pode receber quantidades distintas de dias e verificar se o valor atende às regras da biblioteca antes de renovar o empréstimo.

Programação orientada a objetos em Java: exemplo prático

O exemplo abaixo representa um livro cujo estado é controlado pela própria classe. Salve o conteúdo em um arquivo chamado Main.java.

class Livro {

    private final String titulo;

    private boolean emprestado;

    public Livro(String titulo) {

        if (titulo == null || titulo.trim().isEmpty()) {

            throw new IllegalArgumentException(“Informe um título.”);

        }

        this.titulo = titulo;

        this.emprestado = false;

    }

    public void emprestar() {

        if (emprestado) {

            throw new IllegalStateException(“Livro já emprestado.”);

        }

        emprestado = true;

    }

    public void devolver() {

        if (!emprestado) {

            throw new IllegalStateException(“Livro não está emprestado.”);

        }

        emprestado = false;

    }

    public String getTitulo() {

        return titulo;

    }

    public boolean isEmprestado() {

        return emprestado;

    }

}

public class Main {

    public static void main(String[] args) {

        Livro livro = new Livro(“Dom Casmurro”);

        livro.emprestar();

        System.out.println(livro.getTitulo());

        System.out.println(livro.isEmprestado());

        livro.devolver();

        System.out.println(livro.isEmprestado());

    }

}

A saída esperada é:

Dom Casmurro

true

false

Vamos interpretar o código:

  1. class Livro declara o tipo que representa os livros.
  2. private final String titulo guarda o título e impede sua reatribuição após a inicialização.
  3. private boolean emprestado registra o estado do empréstimo, sem permitir acesso direto por Main.
  4. public Livro(String titulo) declara o construtor e seu parâmetro.
  5. O primeiro if rejeita títulos nulos, vazios ou compostos apenas por espaços.
  6. throw lança uma exceção para sinalizar que a operação não pode prosseguir.
  7. this.titulo = titulo atribui o parâmetro ao atributo do objeto. this identifica a instância atual.
  8. emprestar() e devolver() verificam o estado antes de modificá-lo.
  9. getTitulo() e isEmprestado() permitem consultar informações sem oferecer alteração direta.
  10. new Livro(…) cria uma instância, que passa a ser referenciada pela variável livro.
  11. As chamadas em main demonstram a mudança de estado do objeto.

Observe que não existe um método setEmprestado(boolean valor). O programa expressa as operações do domínio — emprestar e devolver — e mantém suas validações dentro da classe responsável.

Sobrecarga e sobrescrita de métodos

A sobrecarga ocorre quando métodos possuem o mesmo nome, mas listas de parâmetros diferentes. Em Java, a diferença pode estar na quantidade, nos tipos ou na ordem dos tipos dos parâmetros. Alterar apenas o nome dos parâmetros ou o tipo de retorno não basta.

Neste trecho, os métodos poderiam pertencer à mesma classe:

public void renovar(int dias) {

    renovar(dias, “Solicitação do leitor”);

}

public void renovar(int dias, String motivo) {

    if (dias <= 0) {

        throw new IllegalArgumentException(“Informe dias positivos.”);

    }

    System.out.println(“Renovação: ” + dias + ” dias. Motivo: ” + motivo);

}

A primeira versão recebe somente os dias e chama a segunda com um motivo padrão. A segunda recebe dois parâmetros e concentra o processamento. Em Java, a escolha da sobrecarga é feita em tempo de compilação, considerando as informações de tipos disponíveis na chamada.

A sobrescrita ocorre quando uma subclasse fornece uma nova implementação para um método de instância herdado, respeitando as regras da linguagem. Em Java, a anotação @Override permite ao compilador verificar essa intenção. A chamada de um método sobrescrito utiliza a implementação correspondente ao objeto em tempo de execução. Métodos static são ocultados, e não sobrescritos. 

AspectoSobrecargaSobrescrita
Nome do métodoIgualIgual
ParâmetrosListas diferentesAssinatura compatível com o método herdado
Exige herança?NãoEnvolve um método de um supertipo
FinalidadeOferecer diferentes formas de chamadaEspecializar um comportamento
Decisão em JavaCompilaçãoExecução, no despacho do método de instância

Interfaces e classes abstratas

Uma interface define um contrato que os objetos podem cumprir. Por exemplo, uma interface Descritivel pode exigir o método descricao(). Diferentes classes podem implementar esse contrato, permitindo que o restante do sistema solicite descrições sem depender de uma classe concreta específica.

Uma classe abstrata não pode ser instanciada diretamente e pode reunir atributos, construtores, métodos implementados e métodos abstratos. Um método abstrato declara uma operação sem fornecer sua implementação naquele ponto.

A escolha depende da modelagem. Uma interface é útil para representar uma capacidade comum a diferentes tipos. Uma classe abstrata é útil quando tipos relacionados compartilham estado e implementação. Em Java, interfaces também podem oferecer métodos com implementação, como métodos default; portanto, não devem ser definidas simplesmente como estruturas que “nunca possuem código”.

O exemplo a seguir reúne interface, classe abstrata, herança e polimorfismo. Ele é independente do anterior e também pode ser salvo como Main.java.

interface Descritivel {

    String descricao();

}

abstract class Publicacao implements Descritivel {

    private final String titulo;

    protected Publicacao(String titulo) {

        this.titulo = titulo;

    }

    protected String getTitulo() {

        return titulo;

    }

    @Override

    public abstract String descricao();

}

class LivroDigital extends Publicacao {

    public LivroDigital(String titulo) {

        super(titulo);

    }

    @Override

    public String descricao() {

        return “Livro digital: ” + getTitulo();

    }

}

class LivroImpresso extends Publicacao {

    public LivroImpresso(String titulo) {

        super(titulo);

    }

    @Override

    public String descricao() {

        return “Livro impresso: ” + getTitulo();

    }

}

public class Main {

    public static void main(String[] args) {

        Descritivel[] itens = {

            new LivroDigital(“Java na prática”),

            new LivroImpresso(“Fundamentos de POO”)

        };

        for (Descritivel item : itens) {

            System.out.println(item.descricao());

        }

    }

}

Veja como as partes se conectam:

  1. Descritivel declara o contrato descricao().
  2. Publicacao implementa esse contrato, mas deixa a descrição abstrata para as subclasses.
  3. O atributo titulo concentra um dado comum às publicações.
  4. O construtor de Publicacao inicializa esse atributo.
  5. extends Publicacao estabelece a herança.
  6. super(titulo) chama o construtor da superclasse.
  7. Cada @Override identifica uma implementação específica de descricao().
  8. O vetor Descritivel[] reúne objetos por seu contrato comum.
  9. O laço chama a mesma operação, mas cada objeto executa seu comportamento.

A saída esperada é:

Livro digital: Java na prática

Livro impresso: Fundamentos de POO

Modificadores de acesso: público, privado e protegido

Os modificadores de acesso determinam onde classes e membros podem ser utilizados. Para membros de classes em Java, as regras básicas são:

AcessoRegra geral
publicPermite acesso de outros locais, desde que o tipo também esteja acessível
privateRestringe o acesso ao contexto privado da classe, incluindo as regras de classes aninhadas
protectedPermite acesso no mesmo pacote e, sob regras específicas, por subclasses em outros pacotes
Sem modificadorPermite acesso dentro do mesmo pacote

Um pacote organiza classes em um espaço de nomes. A ausência de modificador produz o acesso de pacote, frequentemente chamado de package-private. Não se escreve a palavra default para declarar esse nível de acesso.

Associação, agregação e composição

A associação representa um relacionamento entre objetos. Um leitor pode estar associado a um empréstimo, por exemplo. Ela indica que os elementos se relacionam, sem necessariamente estabelecer uma relação de propriedade entre eles.

A agregação representa uma relação entre um todo e suas partes na qual as partes podem existir independentemente. Uma equipe pode agregar professores: se a equipe for desfeita, os professores continuam existindo. A interpretação exata deve respeitar as regras do domínio modelado.

A composição representa uma relação mais forte de pertencimento. Um pedido pode ser composto por itens de pedido que existem como partes daquele pedido. Na modelagem, a parte pertence a no máximo um todo por vez, e seu ciclo de vida está subordinado ao todo.

RelaçãoIdeia centralExemplo
AssociaçãoObjetos se relacionamLeitor realiza empréstimo
AgregaçãoTodo reúne partes independentesEquipe reúne professores
ComposiçãoTodo possui partes com dependência de ciclo de vidaPedido possui itens de pedido

Essas relações não são determinadas apenas pela presença de um atributo que referencia outro objeto. Uma lista de objetos, por si só, não prova que existe composição. É necessário observar propriedade, compartilhamento e ciclo de vida. Em Java e Python, a coleta automática de memória também não substitui essas regras de negócio.

Coesão, acoplamento e manutenção

A coesão indica o quanto as responsabilidades de uma unidade estão relacionadas. Uma classe Emprestimo que controla retirada, prazo e devolução possui responsabilidades próximas. Se também gerar relatórios financeiros e administrar senhas, estará reunindo tarefas pouco relacionadas.

O acoplamento representa o grau de dependência entre partes do sistema. Quando uma classe conhece muitos detalhes internos de outra, mudanças pequenas podem causar efeitos em vários lugares. Contratos bem definidos e interfaces podem reduzir dependências desnecessárias.

Em geral, buscamos alta coesão e baixo acoplamento. Isso não significa eliminar toda dependência: objetos precisam colaborar. A intenção é tornar essa colaboração clara, limitada e mais fácil de modificar.

A reutilização de código pode ocorrer por herança, composição e delegação, quando um objeto encaminha uma tarefa a outro. A modularidade divide o sistema em partes com responsabilidades definidas. Essas práticas favorecem a manutenção, os testes e a evolução do software, mas dependem de boas decisões de projeto; utilizar classes não garante qualidade automaticamente.

Programação orientada a objetos em Python

Python também permite definir classes, criar objetos e sobrescrever métodos. No exemplo, self representa a instância, e __init__ inicializa seu estado. Tecnicamente, __new__ participa da criação da instância, enquanto __init__ a inicializa. 

class Publicacao:

    def __init__(self, titulo):

        self.titulo = titulo

    def descricao(self):

        return f”Publicação: {self.titulo}”

class LivroDigital(Publicacao):

    def descricao(self):

        return f”Livro digital: {self.titulo}”

itens = [

    Publicacao(“Fundamentos de POO”),

    LivroDigital(“Python na prática”),

]

for item in itens:

    print(item.descricao())

Passo a passo:

  1. class Publicacao define a classe base.
  2. __init__ recebe o título e o armazena na instância.
  3. descricao() produz um texto.
  4. LivroDigital(Publicacao) declara a herança.
  5. A segunda definição de descricao() sobrescreve a primeira na subclasse.
  6. O laço demonstra comportamentos diferentes para a mesma chamada.

Python não utiliza public, private e protected como Java. _atributo sinaliza uso interno por convenção; __atributo aciona uma transformação de nome para reduzir colisões acidentais, sem oferecer privacidade absoluta. Além disso, redefinir métodos de mesmo nome não cria automaticamente sobrecargas por assinatura como em Java.

Como estudar POO para concursos públicos

Para concursos, combine o estudo das definições com a leitura de pequenos programas. Treine identificar o tipo declarado de uma variável, a classe do objeto criado, os parâmetros de cada método e a implementação executada em uma chamada.

Também vale praticar a interpretação de diagramas de classes da UML, uma linguagem de modelagem utilizada para representar estruturas de software. Relacione cada vínculo do diagrama às regras do domínio e observe como ele poderia ser implementado. A profundidade exigida depende do edital e da linguagem indicada.

Aprender programação orientada a objetos envolve entender como distribuir dados, comportamentos e responsabilidades. Classes e objetos formam a estrutura; abstração, encapsulamento, herança e polimorfismo ajudam a organizá-la. Ao relacionar esses conceitos com exemplos e regras de negócio, você desenvolve a capacidade de interpretar questões e construir sistemas mais fáceis de compreender e manter. Continue praticando, Padawan: transforme os exemplos, acompanhe a execução e explique cada decisão com suas próprias palavras.

FAQ — Perguntas frequentes sobre programação orientada a objetos

O que é programação orientada a objetos?

É um paradigma que organiza o software em objetos que reúnem dados e comportamentos. Esses objetos colaboram para realizar as funcionalidades do sistema.

Qual é a diferença entre classe e objeto?

A classe define a estrutura e os comportamentos de um tipo. O objeto é uma instância concreta dessa classe, com identidade e estado próprios.

O que são atributos e métodos?

Atributos armazenam informações associadas aos objetos ou à classe. Métodos representam operações, como consultar dados, validar regras e modificar o estado de uma instância.

Como funciona a herança na programação orientada a objetos?

Uma subclasse deriva de uma superclasse e pode aproveitar ou especializar comportamentos, conforme as regras de acesso e herança da linguagem. A relação deve representar uma especialização coerente, como “livro digital é uma publicação”.

Qual é a diferença entre sobrecarga e sobrescrita de métodos?

Sobrecarga oferece métodos de mesmo nome com listas de parâmetros diferentes. Sobrescrita fornece uma implementação específica para um método de instância herdado. Em Java, a sobrecarga é resolvida na compilação, enquanto o despacho de métodos sobrescritos considera o objeto em execução.

Quais são os modificadores de acesso utilizados na POO?

Eles dependem da linguagem. Em Java, os principais são public, private e protected, além do acesso de pacote quando não há modificador. Python utiliza convenções e mecanismos diferentes para indicar ou organizar o acesso interno.

Quais são as vantagens da programação orientada a objetos?

A POO pode favorecer modularidade, reutilização, organização das responsabilidades, testes e manutenção. Esses benefícios dependem de uma modelagem adequada e do controle das dependências entre as partes.

Qual é a diferença entre associação, agregação e composição?

Associação é um relacionamento entre objetos. Agregação expressa uma relação entre todo e partes que podem existir independentemente. Composição expressa pertencimento mais forte, com as partes subordinadas ao ciclo de vida do todo.

Como a programação orientada a objetos é cobrada em concursos públicos?

Pode aparecer em questões conceituais, interpretação de código, identificação de resultados, análise de modificadores de acesso e leitura de diagramas UML. Para se preparar, estude os conceitos e pratique as regras específicas das linguagens previstas no edital.

Vamos praticar um pouco?

FUNDATEC – 2026 – Polícia Penal – RS – Analista da Polícia Penal – Ciência da Computação

Na orientação a objetos, qual é o caso apresentado por uma classe que possui métodos com os mesmos nomes, mas com assinaturas diferentes (tipos ou quantidade de parâmetros distintos)?

A) Agregação.
B) Composição.
C) Encapsulamento.
D) Sobrecarga.
E) Sobrescrita.

Gabarito: D — Sobrecarga.

A) Agregação — Incorreta. É um relacionamento entre um todo e suas partes, no qual as partes podem existir independentemente. Por exemplo, uma equipe agrega professores, mas esses professores continuam existindo se a equipe for desfeita. Não se refere à assinatura dos métodos.

B) Composição — Incorreta. É uma relação forte de pertencimento entre um todo e suas partes, com dependência de ciclo de vida. Por exemplo, um pedido pode ser composto por itens que pertencem especificamente a ele. Não representa métodos de mesmo nome.

C) Encapsulamento — Incorreta. Consiste em reunir dados e comportamentos e controlar o acesso aos detalhes internos do objeto, preservando suas regras. Um exemplo é manter um atributo privado e permitir alterações somente por métodos que validem os valores recebidos.

D) Sobrecarga — Correta. Ocorre quando existem métodos com o mesmo nome e diferentes listas de parâmetros, variando a quantidade, os tipos ou a ordem dos tipos. Por exemplo, em Java:

int somar(int a, int b) {

    return a + b;

}

int somar(int a, int b, int c) {

    return a + b + c;

}

double somar(double a, double b) {

    return a + b;

}

Os três métodos se chamam somar, mas recebem parâmetros diferentes. O primeiro recebe dois inteiros; o segundo, três inteiros; e o terceiro, dois valores do tipo double. Em Java, alterar apenas o tipo de retorno não caracteriza uma sobrecarga válida.

E) Sobrescrita — Incorreta. Ocorre quando uma subclasse fornece uma nova implementação para um método de instância herdado, mantendo uma assinatura compatível com a original. Por exemplo, uma subclasse Cachorro pode sobrescrever o método emitirSom() de Animal. A questão descreve diferentes listas de parâmetros, característica da sobrecarga.

CESPE / CEBRASPE – 2026 – UNEAL – Analista Administrativo – Área: Análise de Sistemas

Na arquitetura orientada a objetos, o encapsulamento é o princípio que visa ocultar os detalhes de implementação interna e proteger o estado de um objeto, restringindo o acesso direto aos seus atributos e mediando a interação do meio externo por meio de métodos públicos definidos.

Gabarito: Verdadeiro.

 O encapsulamento permite controlar como outras partes do sistema interagem com um objeto. Ao restringir o acesso direto aos atributos e disponibilizar operações públicas, a classe pode validar alterações e preservar a consistência de seu estado interno.

Por exemplo, uma classe ContaBancaria pode manter o atributo saldo privado e oferecer os métodos públicos depositar() e sacar(). Esses métodos verificam as regras da operação, como impedir depósitos negativos ou saques superiores ao saldo disponível.

Assim, o código externo utiliza as operações oferecidas sem precisar conhecer ou manipular diretamente a implementação interna.

Atenção, Padawan: encapsular não é apenas declarar atributos privados e criar métodos de leitura e escrita. Esses métodos também precisam controlar o acesso e preservar as regras do objeto.

FUNDATEC – 2026 – IPAM – Caxias do Sul – RS – Analista de Sistemas

Na programação orientada a objetos, qual mecanismo permite que uma subclasse forneça uma implementação específica para um método que já é definido em sua superclasse?

A) Sobrescrita.
B) Abstração.
C) Encapsulamento.
D) Sobrecarga.

Gabarito: A — Sobrescrita.

Justificativa de cada alternativa:

A) Sobrescrita — Correta. Ocorre quando uma subclasse fornece uma implementação específica para um método de instância herdado da superclasse, respeitando uma assinatura compatível e as regras da linguagem. Por exemplo, a superclasse Animal pode definir o método emitirSom(), e a subclasse Cachorro pode sobrescrevê-lo para emitir um latido.

B) Abstração — Incorreta. Consiste em representar as características essenciais de um elemento para determinado contexto, deixando de lado detalhes desnecessários. Embora possa ser expressa por classes e métodos abstratos, não é o nome do mecanismo de redefinição de um método herdado.

C) Encapsulamento — Incorreta. Consiste em controlar o acesso ao estado e aos detalhes internos de um objeto, oferecendo operações que preservem suas regras. Não corresponde à implementação específica de um método pela subclasse.

D) Sobrecarga — Incorreta. Ocorre quando métodos possuem o mesmo nome, mas listas de parâmetros diferentes, variando a quantidade, os tipos ou a ordem dos tipos. Não exige herança e não corresponde à redefinição de um método herdado.

Para lembrar, Padawan: sobrescrita especializa um comportamento herdado; sobrecarga oferece diferentes formas de chamar métodos com o mesmo nome.

CESPE / CEBRASPE – 2026 – SEPLAG-AL – Especialista em Gestão Pública – Especialidade: Análise de Sistemas

Com relação à arquitetura de software, à interoperabilidade de sistemas e a tecnologias associadas, julgue o item subsequente.

Em programação orientada a objetos, um objeto define as características e os comportamentos de um conjunto de classes.

Gabarito: Falso.

Justificativa: O item inverte a relação entre classe e objeto. A classe define a estrutura e os comportamentos de seus objetos por meio de atributos e métodos. O objeto, por sua vez, é uma instância de uma classe, com identidade e estado próprios.

Por exemplo, a classe Carro pode definir os atributos cor e velocidade, além do método acelerar(). Dois objetos dessa classe podem representar carros diferentes: um vermelho, parado, e outro preto, a 40 km/h. Ambos seguem a estrutura definida pela classe, mas possuem estados distintos.

Correção do item: Em programação orientada a objetos, uma classe define as características e os comportamentos de um conjunto de objetos.

VUNESP – 2026 – UNESP – Analista de Informática I – Área de Atuação: Desenvolvimento de Sistemas – São Paulo

Na linguagem Java, as classes podem herdar métodos e atributos de outras classes, segundo uma estrutura hierárquica. A classe que está na raiz da hierarquia de classes da linguagem Java é a:

A) Class.
B) Java.
C) Main.
D) Void.
E) Object.

Gabarito: E — Object.

Justificativa de cada alternativa:

A) Class — Incorreta. A classe java.lang.Class representa classes e interfaces durante a execução do programa. É utilizada em reflexão, mecanismo que permite consultar informações sobre tipos, como seus métodos, atributos e construtores. Não é a raiz da hierarquia.

B) Java — Incorreta. Java é o nome da linguagem. Não existe uma classe padrão chamada Java que exerça o papel de raiz da hierarquia.

C) Main — Incorreta. Main é um nome frequentemente escolhido para a classe que contém o ponto de entrada de um programa. Esse nome não lhe confere qualquer posição especial na hierarquia de classes.

D) Void — Incorreta. A classe java.lang.Void está associada à representação do tipo void em reflexão. Não deve ser confundida com a palavra-chave void, utilizada para indicar que um método não retorna valor.

E) Object — Correta. A classe java.lang.Object é a raiz da hierarquia de classes do Java. Toda classe, exceto a própria Object, deriva dela direta ou indiretamente. Quando uma classe comum não declara explicitamente uma superclasse com extends, sua superclasse direta é Object.

Por exemplo:

class Pessoa {

}

Nesse caso, a relação de herança equivale a:

class Pessoa extends Object {

}

Por isso, objetos de Pessoa dispõem de métodos herdados de Object, como toString(), equals() e hashCode().

Atenção, Padawan: tipos primitivos, como int, boolean e double, não são objetos e não herdam de Object.

Por
Publicado em
16 min. de leitura

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *