JayCesar / uni_life

0 stars 0 forks source link

Conceitos básicos de COO (03/04) e (05/04) #2

Open JayCesar opened 2 months ago

JayCesar commented 2 months ago

📚 Interface

Interface é como se fosse uma Api!

Em muitas linguagens de programação orientadas a objetos, uma classe pode implementar mais de uma interface. Isso é conhecido como herança de interface múltipla. Em algumas linguagens, como Java e C#, uma classe pode implementar quantas interfaces forem necessárias, permitindo assim que ela herde comportamentos e métodos de várias fontes diferentes.

public interface InterfaceA {
    void metodoA();
}

public interface InterfaceB {
    void metodoB();
}

public class MinhaClasse implements InterfaceA, InterfaceB {
    public void metodoA() {
        // implementação do método A
    }

    public void metodoB() {
        // implementação do método B
    }
}

Uma interface não é uma classe! Se eu não implemento ela o compilador não irá compilar ela!

Eu consigo 'instanciar' um interface a partir de uma classe que implementa ela.

interface Animal {
   void vocalize();
}

class Cow implements Animal{}
   public void vocalize() { moo(); }
   public void moo() {System.out.println("Moo!");
}

// Compila:
Animal c = new Cow();  // c.vocalize();

// Não compila!
Animal d = new Cow(); // d.moo();
// Pois a interface não tem o método moo, apenas a classe Cow possui

Se temos 'medinho' de mudar algo, as coisas ruins não irão mudar! Medo de mudança paralisa o desenvolvedor!


Ocultação de informação de interfaces

image

Modificador Classe Pacote Sub Classe Mundo
public
protected
padrão
private

Protected só deixa ter acesso a subclasses dentro do mesmo pacote! Private só a classse possui!


Curiosidade: existe algo chamado Programação Orientada aos métodos.

Boas práticas:

Tipos

Um tipo é um conjunto de valores e suas operações; Um tipo pode ser um tipo primitivo ou um tipo de referência;

Primitivo são: int, double, boolean etc..

De referência são: Classes, Interfaces, Vetores, Enums, Anotações

Lembre-se: String é tipo imutável!

Dúvidas:


Sobre a atribuição de valores image

JayCesar commented 2 months ago

Continuação (05/04)

O quê eu quero? O quê dá para fazer diferente? Devo estudar para exame de proficiência?

📌Comparação entre valores:

• x == y compara x e y “diretamente” • Valores primitivos: devolve true se x e y possuem o mesmo valor; • Referência a objetos: devolve true se x e y referirem ao mesmo objeto

x.equals(y) compara valores dos objetos referenciados por x e y

📌Tipos de vetores

• Um tipo de vetor t[] é um tipo de referência; Exemplos de variáveis com esses tipos:

String[] args
int[] listaDeInteiros = {0, 1, 2, 3, 4, 6}
double[] reais = new double[7]

📌Boxing (Wrappers)

• Para cada tipo primitivo, há uma classe wrapper (invólucro) correspondente que, por sua vez, é um tipo de referência • Uma instância de um objeto de uma classe wrapper contém um único valor do tipo primitivo correspondente • Um wrapper deve ser usado quando um valor de um tipo primitivo é passado para um método que espera um tipo de referência, ou quando um valor primitivo é armazenado em uma variável ou campo de um tipo de referência • Java automaticamente faz o boxing (transformação do tipo primitivo para o tipo do wrapper) e o unboxing (transformação contrária) • Você pode fazer isso explicitamente usando operações como

new Integer(i) // ou 
o.intValue()

Ou seja o, o Java faz isso automaticamente para mim. -> Boxing é salvar um variável do tipo primitivo em uma variável de objeto (referência) e unboxing é o oposto.

Exemplo:

Character ch = 'a';
Boolean bb1 = false, bb2 = !bb1; // Boxing para [false] [true]
Integer bi1 = 117; // Boxing para [117]
Double bd1 = 1.2; // Boxing para [1.2]
boolean b1 = bb1; // Unboxing, resulta false
if (bb1) // Unboxing, resulta false
System.out.println("Not true");
int i1 = bi1 + 2; // Unboxing, resulta 119
// short s = bi1; // Ilegal
Integer bi2 = bi1 + 2; // Unboxing, boxing, resulta [119]
Integer[] biarr = { 2, 3, 5, 7, 11 };
int sum = 0;
for (Integer bi : biarr)
sum += bi; // Unboxing no corpo do loop
for (int i : biarr) // Unboxing no cabeçalho do loop
sum += i;

⚠️ String não é um um invólucro (wrapper)! String é objeto de tipo referência e não possui um tipo primitivo.

📌Primitivos Boxed

image

📌O que é um pacote?

Um pacote é um espaço de nomes que organiza um conjunto de classes e interfaces relacionadas. image _Exemplo citado sobre C: utilizar arquivo.h com mesmos nomes (gera um warning);_

📌Tipos Enum

•Java tem enums orientados a objeto • Na sua forma mais simples, são como enums de C:

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}

Ou seja, um variávei do tipo Day pode ser Sunday, Mondey, Tuesday...; image

Obs: Profile (perfilamento do código) -> Análise do código para eu perceber quais trechos to código eu gasto mais tempo.

📌Perfilamento

O perfilamento, em termos de programação e desenvolvimento de software, refere-se ao processo de coleta e análise de dados relacionados ao desempenho e comportamento de um programa em execução. O objetivo do perfilamento é identificar áreas do código que podem estar consumindo muitos recursos, como CPU, memória ou E/S, e otimizá-las para melhorar o desempenho geral do programa.

Em Java, existem várias ferramentas de perfilamento que podem ser utilizadas para analisar o desempenho de um programa e identificar áreas de melhoria. Algumas das ferramentas mais comuns incluem:

VisualVM: VisualVM é uma ferramenta de monitoramento e perfilamento fornecida pela Oracle como parte do JDK. Ela oferece recursos como monitoramento de uso de CPU, uso de memória, monitoramento de threads, entre outros. VisualVM também suporta plugins para estender suas funcionalidades.

Java Mission Control: Java Mission Control (JMC) é outra ferramenta fornecida pela Oracle que oferece recursos avançados de monitoramento e análise de desempenho para aplicativos Java em tempo real. Ele é geralmente utilizado em ambientes de produção para diagnóstico de problemas de desempenho.

YourKit: YourKit é uma ferramenta comercial de perfilamento para Java e .NET. Ela oferece recursos avançados de análise de desempenho, incluindo monitoramento em tempo real, análise de alocação de memória, análise de CPU e integração com várias IDEs.

JProfiler: JProfiler é outra ferramenta comercial de perfilamento para Java que oferece uma ampla gama de recursos para análise de desempenho, incluindo análise de alocação de memória, monitoramento de threads, análise de uso de CPU, entre outros.

NetBeans Profiler: NetBeans Profiler é uma ferramenta de perfilamento integrada ao ambiente de desenvolvimento NetBeans. Ela oferece recursos de análise de desempenho, incluindo monitoramento de uso de CPU, alocação de memória, entre outros.

⚠️ ~Comparação String: Comparação de String gasta muito! Pois eu analiso caractere a caractere! O Enum serve para economizar a utilização / espaço de memória.

Exemplo:

// Definição de um enum chamado DiaSemana
enum DiaSemana {
    SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO, DOMINGO
}

public class ExemploEnum {
    public static void main(String[] args) {
        // Usando o enum DiaSemana
        DiaSemana dia = DiaSemana.SEGUNDA;

        // Imprimindo o valor do enum
        System.out.println("Dia da semana: " + dia);

        // Comparando enums
        if (dia == DiaSemana.SEGUNDA) {
            System.out.println("É segunda-feira!");
        } else {
            System.out.println("Não é segunda-feira.");
        }

        // Iterando sobre todos os valores do enum
        System.out.println("Dias da semana:");
        for (DiaSemana d : DiaSemana.values()) {
            System.out.println(d);
        }
    }
}

Outro exemplo (da aula): image Na hora que eu for instanciar eu devo fazer assim:

EnumTest enum = new EnumTest(FRIDAY); //or
EnumTest enum = new EnumTest(SUNDAY);

📌Membros da Classe

image image image image O main é a primeira coisa que eu vou fazer no programa, logo, não há nada para instanciar!

📌Constantes

final // indica que é imutável
static final // indica que é imutável e compartilhado por todas as instâncias dessa classe

image

⚠️ DIca:: adote uma convenção de código e siga!

📌Anotações

image image

Métodos com @Test pode ser utilizados depois por programas de testes

image

image

Link: https://docs.oracle.com/javase/tutorial/java/concepts/index.html