O documento discute os princípios da programação orientada a objetos, como baixo acoplamento, alta coesão e programação voltada à interface. Também aborda tópicos como composição de comportamentos, evitar herança em favor da composição e cuidados com objetos mutáveis.
O documento discute programação orientada a objetos, acoplamento e desacoplamento de classes. Ele apresenta como refatorar um código com alto acoplamento entre classes para diminuir essa dependência e torná-lo mais flexível e mantível através da introdução de uma classe ServiceLocator. O documento também explica como separar a lógica de negócio de um sistema desktop em um servidor, de forma que ambos possam evoluir de forma independente.
O documento descreve as etapas para construir um sistema MVC (Model View Controller) utilizando programação orientada a objetos em Java. Inicialmente, é criada a interface gráfica do usuário e em seguida são implementadas as classes de domínio, DAO e controlador para realizar o mapeamento objeto-relacional com Hibernate e permitir a comunicação entre a camada de visão e modelo. Por fim, são implementadas validações dos campos e removida a geração automática de tabelas no banco de dados.
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...Carlos Eduardo
Slides da oitava e última aula de Programação Orientada a Objetos no curso de Pós Graduação em Análise e Desenvolvimento Aplicados à Gestão Empresarial
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...Carlos Eduardo
O documento discute refatoração de código usando o padrão de projeto Hook Class. Especificamente, descreve como refatorar uma classe DAO usando herança para composição através da criação de uma interface e injeção de dependência na classe DAO.
Este documento discute programação orientada a objetos. Ele introduz os conceitos básicos de POO e destaca a importância de modelagem de classes. Também discute problemas comuns como código procedural disfarçado de POO e a dificuldade de mudança em projetos de classes complexos. Finalmente, fornece princípios e padrões de projeto orientados a objetos.
Não deixe seu projeto só nas mãos do frameworkGiuseppe Lopes
O documento discute a importância de não depender apenas do framework para o desenvolvimento de projetos, mas sim de entender os princípios de back-end e de escolher o framework correto para o projeto. Também apresenta exemplos de frameworks populares e um caso de sucesso do Instagram, desenvolvido inicialmente por dois programadores sem muita experiência em back-end.
O documento discute programação orientada a objetos, acoplamento e desacoplamento de classes. Ele apresenta como refatorar um código com alto acoplamento entre classes para diminuir essa dependência e torná-lo mais flexível e mantível através da introdução de uma classe ServiceLocator. O documento também explica como separar a lógica de negócio de um sistema desktop em um servidor, de forma que ambos possam evoluir de forma independente.
O documento descreve as etapas para construir um sistema MVC (Model View Controller) utilizando programação orientada a objetos em Java. Inicialmente, é criada a interface gráfica do usuário e em seguida são implementadas as classes de domínio, DAO e controlador para realizar o mapeamento objeto-relacional com Hibernate e permitir a comunicação entre a camada de visão e modelo. Por fim, são implementadas validações dos campos e removida a geração automática de tabelas no banco de dados.
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...Carlos Eduardo
Slides da oitava e última aula de Programação Orientada a Objetos no curso de Pós Graduação em Análise e Desenvolvimento Aplicados à Gestão Empresarial
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...Carlos Eduardo
O documento discute refatoração de código usando o padrão de projeto Hook Class. Especificamente, descreve como refatorar uma classe DAO usando herança para composição através da criação de uma interface e injeção de dependência na classe DAO.
Este documento discute programação orientada a objetos. Ele introduz os conceitos básicos de POO e destaca a importância de modelagem de classes. Também discute problemas comuns como código procedural disfarçado de POO e a dificuldade de mudança em projetos de classes complexos. Finalmente, fornece princípios e padrões de projeto orientados a objetos.
Não deixe seu projeto só nas mãos do frameworkGiuseppe Lopes
O documento discute a importância de não depender apenas do framework para o desenvolvimento de projetos, mas sim de entender os princípios de back-end e de escolher o framework correto para o projeto. Também apresenta exemplos de frameworks populares e um caso de sucesso do Instagram, desenvolvido inicialmente por dois programadores sem muita experiência em back-end.
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
Este documento resume a quarta aula de um mini curso sobre programação de interfaces gráficas. Os objetivos da aula incluem concluir o desenvolvimento do CRUD de fornecedores iniciado na aula anterior, criar o CRUD de produtos e distribuir o sistema usando Java Web Start. O documento também fornece instruções para implementar essas funcionalidades.
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
Este documento apresenta um mini curso sobre programação de interfaces gráficas com Swing. Ele discute a criação de um projeto em NetBeans usando o padrão MVC e vinculação de componentes com Beans Binding. O documento também fornece uma visão geral dos principais componentes Swing e do framework.
O documento descreve um exercício de programação orientada a objetos em Java. Ele inclui: 1) a criação de uma classe Cliente com atributos e métodos getters e setters; 2) uma interface ClienteDAO com métodos CRUD; e 3) uma classe ClienteListDAO que implementa a interface e permite executar as operações CRUD em uma lista de clientes.
O documento fornece uma visão geral da linguagem de programação PHP, descrevendo sua história, características, popularidade e usos. PHP é uma linguagem interpretada e de script usada principalmente para desenvolvimento web e é uma das linguagens mais populares atualmente.
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaCarlos Eduardo
Este documento resume um mini curso sobre programação de interfaces gráficas com Java e persistência de dados com Hibernate. Ele inclui instruções sobre como configurar um banco de dados JavaDB, mapear classes com anotações JPA, implementar um DAO para realizar operações CRUD e validar que os dados são persistidos corretamente.
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
O documento descreve as etapas para concluir o desenvolvimento de um CRUD (criar, ler, atualizar, deletar) de fornecedores em uma aplicação Java usando o framework NetBeans. Inclui instruções para adicionar classes de domínio, DAO, controle e visualização, além de vincular campos, adicionar eventos de salvar, excluir e limpar campos.
Mini Curso - Programação de Interfaces Gráficas - aula 2Carlos Eduardo
Este documento descreve a segunda aula de um mini-curso sobre programação de interfaces gráficas. Os objetivos da aula são internacionalizar o aplicativo e criar CRUDs no padrão MVC. É explicado como internacionalizar o aplicativo para diferentes idiomas e como criar frames internos para diferentes telas. Também é mostrado como criar a tela de fornecedor no padrão MVC.
Este documento descreve diferentes métodos para entrada e saída de dados em Java, incluindo o uso das classes BufferedReader, Scanner, Console e JOptionPane. Ele explica como usar esses métodos para ler entradas de usuário como strings e números, e como exibir mensagens usando JOptionPane.
O documento descreve uma aula sobre a linguagem C++ ministrada pela professora Bianca de Almeida Dantas. Apresenta a estrutura básica de um programa em C++, incluindo a função principal e exemplos de "Hello World". Demonstra também declaração de variáveis e tipos de dados, entrada e saída de informações.
WxWidgets é uma biblioteca gráfica multiplataforma livre e de código aberto que permite a criação de interfaces gráficas para aplicações que rodam em diversos sistemas operacionais. Ela fornece widgets nativos e é orientada a objetos e eventos, permitindo compilar programas uma única vez e executá-los em plataformas como Windows, Linux e Mac. WxWidgets teve seu nome alterado de wxWindows para respeitar a marca Windows e possui IDEs como o wxDevC++ para facilitar o desenvolvimento.
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalBianca Dantas
- O documento discute a aplicação de algoritmos genéticos para resolver o problema da mochila multidimensional, que envolve maximizar o valor de itens carregados em uma mochila com múltiplos compartimentos de capacidades limitadas.
- Representa as soluções como cromossomos binários e aplica operadores genéticos como crossover e mutação para gerar novas soluções, avaliando a aptidão com base no valor total carregado.
- Também apresenta implementações sequencial e paralela do algoritmo genético para a mochila multidimension
O documento discute multithreading em Java, abordando tópicos como threads, seu ciclo de vida, agendamento, criação e execução. Apresenta também exemplos de produtor-consumidor e uso de threads com GUI, mostrando como resolver problemas de concorrência de forma segura.
O documento descreve um exercício para desenvolver um aplicativo Java Swing que recebe peso e altura do usuário e calcula o Índice de Massa Corporal (IMC). O programa deve exibir o valor do IMC, a situação de acordo com a faixa de IMC e a faixa de peso ideal para a altura da pessoa.
O documento discute como carregar dados de uma tabela do banco de dados e exibi-los em uma interface gráfica usando JTable e MVC. Ele explica como construir um modelo de dados personalizado (ContatoTableModel) que recupera dados do banco e fornece ao JTable. Também mostra como tornar o JTable editável e atualizar o banco de dados quando os dados são alterados.
O documento descreve um programa em C para realizar um cadastro de contatos. Ele deve incluir uma estrutura contato com campos nome, telefone e ano de nascimento, um vetor global para armazenar até 1000 contatos, e funções para inserir, listar, remover e alterar contatos no vetor.
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
O documento discute modificadores de acesso em Java e como eles podem ser usados para encapsular membros de classe e garantir o baixo acoplamento entre classes. É explicado que atributos geralmente devem ser declarados como privados e acessados via getters e setters públicos.
O documento descreve exercícios sobre componentes GUI em Java usando AWT e Swing. Os exercícios incluem adicionar ouvintes de eventos em janelas, caixas de texto e botões para manipular foco, cores e ações do usuário.
Este documento descreve as etapas para construir uma calculadora básica em Java usando a interface gráfica do NetBeans. O projeto inclui criar pacotes e classes para implementar funções matemáticas básicas como soma, subtração, multiplicação e divisão, além de fatorial e potenciação. A interface gráfica é construída usando widgets Swing como rótulos, campos de texto e botões dentro de um JFrame.
O documento discute frameworks, definindo-os como conjuntos de classes que colaboram para realizar tarefas em domínios específicos de uma aplicação. Explora as vantagens dos frameworks, como redução de custos e tempo de desenvolvimento, e características como reusabilidade, extensibilidade e inversão de controle. Também examina tecnologias comumente embutidas em frameworks, como MVC, ORM e AJAX.
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...HELENO FAVACHO
Este documento apresenta as orientações para a realização de um projeto integrado envolvendo diversas disciplinas de TI. Ele descreve 5 tarefas a serem realizadas pelos alunos, abordando temas como sistemas operacionais, arquitetura de processadores, modulação de sinais, segurança da informação e contêineres.
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
Este documento resume a quarta aula de um mini curso sobre programação de interfaces gráficas. Os objetivos da aula incluem concluir o desenvolvimento do CRUD de fornecedores iniciado na aula anterior, criar o CRUD de produtos e distribuir o sistema usando Java Web Start. O documento também fornece instruções para implementar essas funcionalidades.
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
Este documento apresenta um mini curso sobre programação de interfaces gráficas com Swing. Ele discute a criação de um projeto em NetBeans usando o padrão MVC e vinculação de componentes com Beans Binding. O documento também fornece uma visão geral dos principais componentes Swing e do framework.
O documento descreve um exercício de programação orientada a objetos em Java. Ele inclui: 1) a criação de uma classe Cliente com atributos e métodos getters e setters; 2) uma interface ClienteDAO com métodos CRUD; e 3) uma classe ClienteListDAO que implementa a interface e permite executar as operações CRUD em uma lista de clientes.
O documento fornece uma visão geral da linguagem de programação PHP, descrevendo sua história, características, popularidade e usos. PHP é uma linguagem interpretada e de script usada principalmente para desenvolvimento web e é uma das linguagens mais populares atualmente.
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaCarlos Eduardo
Este documento resume um mini curso sobre programação de interfaces gráficas com Java e persistência de dados com Hibernate. Ele inclui instruções sobre como configurar um banco de dados JavaDB, mapear classes com anotações JPA, implementar um DAO para realizar operações CRUD e validar que os dados são persistidos corretamente.
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
O documento descreve as etapas para concluir o desenvolvimento de um CRUD (criar, ler, atualizar, deletar) de fornecedores em uma aplicação Java usando o framework NetBeans. Inclui instruções para adicionar classes de domínio, DAO, controle e visualização, além de vincular campos, adicionar eventos de salvar, excluir e limpar campos.
Mini Curso - Programação de Interfaces Gráficas - aula 2Carlos Eduardo
Este documento descreve a segunda aula de um mini-curso sobre programação de interfaces gráficas. Os objetivos da aula são internacionalizar o aplicativo e criar CRUDs no padrão MVC. É explicado como internacionalizar o aplicativo para diferentes idiomas e como criar frames internos para diferentes telas. Também é mostrado como criar a tela de fornecedor no padrão MVC.
Este documento descreve diferentes métodos para entrada e saída de dados em Java, incluindo o uso das classes BufferedReader, Scanner, Console e JOptionPane. Ele explica como usar esses métodos para ler entradas de usuário como strings e números, e como exibir mensagens usando JOptionPane.
O documento descreve uma aula sobre a linguagem C++ ministrada pela professora Bianca de Almeida Dantas. Apresenta a estrutura básica de um programa em C++, incluindo a função principal e exemplos de "Hello World". Demonstra também declaração de variáveis e tipos de dados, entrada e saída de informações.
WxWidgets é uma biblioteca gráfica multiplataforma livre e de código aberto que permite a criação de interfaces gráficas para aplicações que rodam em diversos sistemas operacionais. Ela fornece widgets nativos e é orientada a objetos e eventos, permitindo compilar programas uma única vez e executá-los em plataformas como Windows, Linux e Mac. WxWidgets teve seu nome alterado de wxWindows para respeitar a marca Windows e possui IDEs como o wxDevC++ para facilitar o desenvolvimento.
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalBianca Dantas
- O documento discute a aplicação de algoritmos genéticos para resolver o problema da mochila multidimensional, que envolve maximizar o valor de itens carregados em uma mochila com múltiplos compartimentos de capacidades limitadas.
- Representa as soluções como cromossomos binários e aplica operadores genéticos como crossover e mutação para gerar novas soluções, avaliando a aptidão com base no valor total carregado.
- Também apresenta implementações sequencial e paralela do algoritmo genético para a mochila multidimension
O documento discute multithreading em Java, abordando tópicos como threads, seu ciclo de vida, agendamento, criação e execução. Apresenta também exemplos de produtor-consumidor e uso de threads com GUI, mostrando como resolver problemas de concorrência de forma segura.
O documento descreve um exercício para desenvolver um aplicativo Java Swing que recebe peso e altura do usuário e calcula o Índice de Massa Corporal (IMC). O programa deve exibir o valor do IMC, a situação de acordo com a faixa de IMC e a faixa de peso ideal para a altura da pessoa.
O documento discute como carregar dados de uma tabela do banco de dados e exibi-los em uma interface gráfica usando JTable e MVC. Ele explica como construir um modelo de dados personalizado (ContatoTableModel) que recupera dados do banco e fornece ao JTable. Também mostra como tornar o JTable editável e atualizar o banco de dados quando os dados são alterados.
O documento descreve um programa em C para realizar um cadastro de contatos. Ele deve incluir uma estrutura contato com campos nome, telefone e ano de nascimento, um vetor global para armazenar até 1000 contatos, e funções para inserir, listar, remover e alterar contatos no vetor.
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
O documento discute modificadores de acesso em Java e como eles podem ser usados para encapsular membros de classe e garantir o baixo acoplamento entre classes. É explicado que atributos geralmente devem ser declarados como privados e acessados via getters e setters públicos.
O documento descreve exercícios sobre componentes GUI em Java usando AWT e Swing. Os exercícios incluem adicionar ouvintes de eventos em janelas, caixas de texto e botões para manipular foco, cores e ações do usuário.
Este documento descreve as etapas para construir uma calculadora básica em Java usando a interface gráfica do NetBeans. O projeto inclui criar pacotes e classes para implementar funções matemáticas básicas como soma, subtração, multiplicação e divisão, além de fatorial e potenciação. A interface gráfica é construída usando widgets Swing como rótulos, campos de texto e botões dentro de um JFrame.
O documento discute frameworks, definindo-os como conjuntos de classes que colaboram para realizar tarefas em domínios específicos de uma aplicação. Explora as vantagens dos frameworks, como redução de custos e tempo de desenvolvimento, e características como reusabilidade, extensibilidade e inversão de controle. Também examina tecnologias comumente embutidas em frameworks, como MVC, ORM e AJAX.
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...HELENO FAVACHO
Este documento apresenta as orientações para a realização de um projeto integrado envolvendo diversas disciplinas de TI. Ele descreve 5 tarefas a serem realizadas pelos alunos, abordando temas como sistemas operacionais, arquitetura de processadores, modulação de sinais, segurança da informação e contêineres.
1) A programação orientada a objetos surgiu na década de 1960 e visa aproximar o mundo real do virtual através da simulação de objetos e suas interações.
2) O padrão MVC foi criado em 1979 para separar dados, layouts e interfaces gráficas, de modo que alterações em um componente não afetem os outros.
3) A programação orientada a objetos e o padrão MVC trazem benefícios como reutilização de código, escalabilidade, manutenabilidade e desenvolvimento acelerado de sistemas complexos.
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfHELENO FAVACHO
Este documento apresenta as orientações para a realização de um projeto integrado interdisciplinar que aborda conceitos de sistemas operacionais, banco de dados, programação concorrente e protocolos de comunicação na web. Os estudantes deverão realizar individualmente quatro tarefas descritas no documento explorando esses temas e postar o trabalho final no ambiente virtual de aprendizagem dentro do prazo estabelecido.
O documento apresenta os fundamentos de sistemas de gerenciamento de banco de dados. Discute conceitos como banco de dados, sistemas de gerenciamento de banco de dados, características desejáveis, comandos SQL, modelagem conceitual e lógica. O professor Felipe Frederico apresenta esses tópicos e exemplifica com diagramas de entidade-relacionamento.
A proposta desta apresentação é mostrar uma alternativa para construção de aplicações com Ruby on Rails que dá ênfase a modelagem de domínio, separando o código que resolve o problema de negócio do código do framework.
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreHELENO FAVACHO
O documento descreve uma proposta de produção textual interdisciplinar individual (PTI) para estudantes do curso de ADS. A PTI tem como temática "GlobalTecnol S.A - Tecnologias" e objetiva aplicar conceitos de disciplinas do semestre de forma integrada. Os estudantes deverão realizar três tarefas relacionadas a inovação, cabeamentos de rede e tecnologias móveis para testar seus conhecimentos.
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaDextra Sistemas / Etec Itu
Dicas práticas de abordagem adotada em case de migração de legado e como melhorar aplicações legadas deixando sistemas mais estáveis para suportar o tempo de desenvolvimento de novas aplicações
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
O objetivo desta palestra é mostrar como é possível evoluir e reescrever partes de uma aplicação legada com mais 5 anos em produção utilizando técnicas de uma parte Domain Driven Design conhecida como Strategic Design. É uma aplicação web escrita em Python e Django que suporta a operação de um grupo focado em medicina do trabalho, com clínicas espalhadas pelo país.
Nesta palestra vamos mostrar uma abordagem que pode ajudar times que precisam lidar com aplicações legadas grandes e complexas no caminho da modernização.
O documento discute os principais pontos de atenção em projetos de portais corporativos e os principais erros cometidos, incluindo a falta de planejamento, comunicação inadequada e falta de definição de escopo e responsabilidades.
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Renato Groffe
Slides de apresentação realizada no dia 10/12/2021 (sexta) na trilha Development do MVPConf Latam 2021 com meu amigo Robson Rocha de Araújo (Microsoft MVP, MTAC), em uma talk cobrindo boas práticas na implementação de aplicações na nuvem utilizando a metodologia Twelve-Factor App. A palestra também abordou cenários de uso de tecnologias como Git, Azure DevOps, GitHub, GitHub Actions, NuGet, npm, serviços do Microsoft Azure, Redis, Docker, Kubernetes, Helm, Docker Compose, Application Insights, Prometheus, PowerShell e Bash.
Projeto Integrado ADS - a agricultura familiar.pdfHELENO FAVACHO
O documento fornece orientações sobre um projeto integrado para alunos de um curso de análise e desenvolvimento de sistemas. Ele inclui cinco tarefas relacionadas a lógica, desenvolvimento orientado a testes, modelagem de dados, programação estruturada e diagrama de classes.
O código acima possui código duplicado nos métodos refresh() das classes Point e Line. Esse código duplicado viola o princípio DRY (Don't Repeat Yourself) da programação. Uma melhor abordagem seria extrair o código duplicado para um método comum em uma classe abstrata ou utilizar AOP para encapsular esse comportamento em um aspecto.
Projeto integrado ii – ads back end - web - mobile -devopsZairaLessa
O documento apresenta as orientações para a realização do Projeto Integrado II do curso de ADS - BackEnd - Web - Mobile - DevOps, incluindo quatro atividades a serem desenvolvidas e normas de elaboração da produção textual.
PROJETO INTEGRADO II – ADS - BackEnd - Web - Mobile -DevOps.pdfHELENO FAVACHO
O documento apresenta as orientações para a realização do Projeto Integrado II do curso de ADS - BackEnd - Web - Mobile - DevOps, incluindo quatro atividades a serem desenvolvidas e normas de elaboração da produção textual.
Projeto integrado ii – ads back end - web - mobile -devopsHELENO FAVACHO
O documento apresenta as orientações para a realização do Projeto Integrado II do curso de ADS - BackEnd - Web - Mobile - DevOps, incluindo quatro atividades a serem desenvolvidas e normas de elaboração da produção textual.
Palestra ministrada na semana acadêmica da UFPR, para o curso Tecnologia em Informação.
Temas abordados: divida técnica, code smells, como identificar, monitorar e tomar ação.
Proposta de Boas Práticas e Padrões de Desenvolvimento WebEr Galvão Abbott
Este documento propõe padrões e boas práticas para desenvolvimento web, incluindo a importância do versionamento, estrutura de diretórios, fases de desenvolvimento e testes, indentação e nomenclatura consistente. O autor fornece exemplos e explicações detalhadas para cada área.
Semelhante a Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO (20)
When and Why Your Code Starts to Smell BadCarlos Eduardo
O documento discute quando e por que códigos começam a feder mal, resumindo:
1) Analisou quando vários tipos de code smells surgem em projetos de software, encontrando que a maioria aparece logo após a criação da classe.
2) Classificou commits que introduziram code smells, encontrando que a maioria ocorreu para corrigir bugs ou adicionar novas funcionalidades.
3) Discutiu ameaças à validade do estudo como possíveis falsos positivos na detecção de code smells.
Experimentos envolvendo ações de Rejuvenescimento de SoftwareCarlos Eduardo
O documento descreve experimentos realizados para avaliar diferentes ações de rejuvenescimento de software, como reiniciar o computador, sistema operacional, processos e threads. Os resultados mostraram que o Linux teve melhores tempos para ações que envolvem o núcleo do sistema, enquanto o Windows foi melhor para ações internas à JVM. Reiniciar processos de forma graciosa evitou erros, mas aumentou levemente o tempo de resposta.
O documento descreve um vazamento de descritores de socket na JDK que não fechavam corretamente as conexões SSL, levando a um erro de "muitos arquivos abertos". O problema foi reproduzido executando um código de teste que abriu muitas conexões SSL sem fechá-las, resultando na falha após 9000 conexões.
O documento apresenta máquinas de Turing com memória limitada e prova que o problema Accept é decidível, enquanto o problema Empty é indecidível para este tipo de máquina. Apresenta reduções via histórias de computação e exemplos de máquinas de Turing com memória limitada resolvendo problemas de aceitação e não aceitação.
Detecting bad smells in source code using change history informationCarlos Eduardo
This document presents an approach called HIST to detect bad smells in source code by analyzing change history information extracted from version control systems. HIST detects 5 types of bad smells from Fowler's catalog by analyzing co-changes between source code artifacts. An evaluation of HIST on open source projects found it outperformed traditional static code analysis techniques, as it can detect smells characterized by how source code changes over time. Future work could explore hybrid detection approaches and applying HIST to other types of smells.
Recommending refactoring operations in large software systemsCarlos Eduardo
The document discusses algorithms for recommending refactoring operations in large software systems. It describes two main algorithms - a clustering-based algorithm and a graph-based algorithm. The clustering-based algorithm identifies groups of similar methods and entities that could be extracted into separate classes. The graph-based algorithm builds a matrix of relationships between methods and identifies strongly related chains of methods that could form candidate classes. Both algorithms were evaluated on open source systems and shown to effectively recommend extract class refactoring opportunities.
O documento discute o gerenciamento de bancos de dados NoSQL, apresentando conceitos como modelos de dados chave-valor, orientado a documentos e família de colunas. Exemplos de bancos NoSQL como MongoDB, Neo4j e Cassandra são apresentados.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
1. Programação Orientada a Objetos
Princípios OO
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplicados à Gestão Empresarial
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Uberlândia Centro
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Por que precisamos implementar baixo
acoplamento, alta coesão, dentre tanto
outros princípios e conceitos básicos em
POO?
3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Curva de Defeitos do
Hardware
4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Curva de Defeitos do
Software
5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Análise - Curva de Defeitos
• Hardware se desgasta com o tempo;
• Software se deteriora com o tempo;
• Boa parte dos Software legados são
migrados para novas tecnologias por
deterioração, e não por necessidades
tecnológicas.
6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Análise - Curva de Defeitos
• Um bom design de Software visa a uma
arquitetura flexível que permita futuras
alterações, facilitando a produção de
código organizado e legível, maximizando
seu reaproveitamento;
• Boas práticas OO procuram trazer os
benefícios mencionados acima para o
design.
7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Contains() de ArrayList é uma busca muito
custosa em termos computacionais;
• Alternativas de coleções, como HashSet,
são mais eficientes, pois usam
internamente uma tabela Hash.
8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• O problema ao efetuar esta manutenção, é
que todo o código que usava o retorno do
método ArrayList será quebrado,
alterando todos os lugares que dependem
de alguma forma desse método;
• Tarefas do tipo search/replace são um
forte sinal de código ruim;
• Vincular os funcionários a uma
implementação específica de Collection,
caracteriza alto acoplamento.
9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Quanto menos específica for a
interface/classe referenciada, menor o
acoplamento e mais possibilidades de
diferentes implementações;
• Como consequência, o código cliente terá
uma gama menor de métodos que podem
ser invocados.
10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Devemos procurar um balanço entre o
desacoplamento e a necessidade do nosso
código;
• Princípio de Segregação de Interfaces –
clientes não devem ser forçados a
depender de interfaces que não usam.
11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Hibernate usa uma implementação
específica de List, mas sempre retorna List
para evitar quebra de compatibilidade
com o código-fonte da aplicação cliente.
12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• E se quisermos receber objetos via socket
(SocketInputStream), como faz?
• Utilize sempre o tipo menos específico
possível.
13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Geralmente, para a API JDBC, utiliza-se
uma Connection, ao invés de
OracleConnection, MysqlConnection,
dentre outros.
14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Interfaces irão ajudar muito para evitar
instruções switch, ou mesmo um
excessivo número de ifs encadeados,
evitando acoplamentos no modelo,
ocorrendo mudanças frequentes toda vez
que uma nova entidade for adicionada no
domínio.
15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• No projeto criado nas aulas anteriores, os
casos abaixo estão respeitando esse
princípio
16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• Contudo, ClienteView não está
respeitando, gerando um alto
acoplamento com ClienteControl.
17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Programe voltado à Interface,
não à Implementação
• O certo seria criar interfaces e factories
para o Control, visando desacoplar o
máximo possível;
• Contudo, neste caso, como existe uma
implementação de Beans Binding entre o
view e o Control, o prejuízo deste
acoplamento é bastante minimizado.
18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Códigos são mais fáceis de entender e
manter quando possuem poucas
possibilidades de fluxos lógicos, ou seja,
poucos caminhos de execução.
19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Quantas possibilidades diferentes existem
para a execução deste método?
20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Existem diversas responsabilidades de
execução para esta classe;
• Este comportamento pode ser composto
por diversas partes menores, por isso
refatorações podem ser executadas.
21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Observa-se que, passando de estruturado
para OO, o sistema ganhou
4 novas classes e uma
Interface.
24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• O comportamento foi quebrado em
diversas partes, onde foram juntados
novamente através de composição;
• O polimorfismo permite trabalhar de
maneira uniforme com partes que
executam tarefas distintas.
25. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Ao implementar os métodos da Interface
Processo na classe Transferência, observa-
se que o Princípio de Segregação de
Interfaces foi violado.
26. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Componha Comportamentos
• Neste caso, o ideal é quebrar as interfaces
em uma hierarquia, assim como existe a
hierarquia entre Collection e
List/Set/Map;
• Caso o projeto não seja refatorado agora,
existe uma grande chance de sofrer novo
refactoring posteriormente, mesmo que a
implementação deste método seja simples.
27. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Evite Herança, favoreça
composição
• O maior problema da Herança é que
acoplamos a implementação da classe mãe
muito precocemente, criando a
necessidade da classe filha conhecer muito
bem o código interno da classe mãe, o que
é visto como quebra de encapsulamento.
28. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Evite Herança, favoreça
composição
• Exemplo: Herança entre Hashtable e
Properties.
29. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Evite Herança, favoreça
composição
• A motivação dos desenvolvedores da JDK é
válida: o reaproveitamento de código já escrito
na classe Hashtable;
• Usar composição permite o reaproveitamento de
código sem o efeito indesejado de quebra de
encapsulamento;
• No exemplo da jdk, bastaria a classe Properties
fazer associação para um Hashtable privado, e o
método setProperty() delegar para a invocação
de hashtable.put()
30. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Evite Herança, favoreça
composição
• Ao substituir herança por interface, as
vantagens do polimorfismo permanecem,
e o acoplamento é bem menor, já que
nenhuma dessas classes precisam
conhecer o funcionamento interno de
outras, especialmente da classe mãe.
31. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Evite Herança, favoreça
composição
• No projeto das aulas anteriores, ficou claro
que PedidoDaoImpl e ClienteDaoImpl
ficaram livres com o comportamento de
Composição
32. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• Um dos pilares de POO é que não se deve
expor os detalhes de implementação;
• Encapsulando a implementação, pode-se
trocar com facilidade, já que não existe
outro código dependendo destes detalhes;
• O usuário poderá acessar o objeto através
do contrato definido pela interface
pública.
33. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
34. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• No exemplo da classe Conta, o método
setSaldo() feriu o encapsulamento, já que
dificilmente o saldo de uma conta será
simplesmente “substituído” por outro;
• Para alterar o saldo, faz mais sentido alguma
operação como saque() e deposito();
• Nunca crie um getter/setter sem uma
necessidade real;
• Códigos como conta.setSaldo(conta.getSaldo() +
100) estarão espalhados por toda a aplicação.
35. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• Caso a aplicação precise modificar para
que uma taxa seja debitada toda vez que
for realizado um depósito, será necessário
percorrer todo o código e modificar
diversas invocações, usando
search/replace.
36. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
37. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• O código de exemplo é bem procedural, pois não
possui atributos, e excesso do uso de métodos
como funções;
• A classe Banco possui uma intimidade
inapropriada com a classe Conta, pois conhece
demais a sua implementação interna;
• Falta de uso do princípio Tell, Don´t Ask;
• Está rompendo o princípio básico de manter
comportamento e estado relacionados em uma
única classe.
38. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
39. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• Enriqueça as classes com métodos de negócio,
para que não se tornem apenas estruturas de
dados;
• Algumas vezes getters/setters são necessários,
mas cuidado no uso indiscriminado destes.
40. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com o modelo
anêmico
• No projeto da aula anterior, rapidamente foi
percebido que para validar as entidades, nada
melhor do que delegar este comportamento às
mesmas.
41. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com objetos
mutáveis
• Objetos mutáveis são passíveis de efeitos
colaterais, gerando bugs indesejáveis.
42. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com objetos
mutáveis
• Objetos imutáveis são muito mais simples de
manipular, e possuem comportamento
previsível.
43. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cuidado com objetos
mutáveis
• Objetos mutáveis são imprevisíveis, pois no
exemplo abaixo é impossível determinar que a
saída será o ano atual;
• Como solução, muitos criam cópias defensivas
dos objetos, como:
44. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• SILVEIRA, Paulo, Guilherme. LOPES, Sérgio.
MOREIRA, Guilherme, SEPPAT, Nico. KUNG,
Fábio. Introdução à Arquitetura e Design de
Software. Editora Campus, 2012;
• PRESSMAN, Roger. Engenharia de Software –
Uma abordagem Profissional – 7ª edição, 2011;
• ANICHE, Maurício. Orientação a objetos e
SOLID para Ninjas. Casa do Código, 2015;
• GUERRA, Eduardo. Design Patterns com Java.
Casa do Código, 2014.