O documento discute a injeção de dependência e o framework Spring. Apresenta um exemplo de como a injeção de dependência remove a dependência direta entre classes e permite testes mais fáceis. Explica os principais tipos de injeção de dependência e como o Spring implementa a injeção através de construtores e setters via XML. Resume que o Spring facilita a construção de aplicações usando POJOs e cuida de aspectos importantes como a injeção de dependência.
Introduction to the Spring Framework:
Generar description
IoC container
Dependency Injection
Beans scope and lifecycle
Autowiring
XML and annotation based configuration
Additional features
Palestra realizada em abril de 2009 no FLISOL de Aracaju/Sergipe. O tema foi o framework orientado a objetos em PHP chamado Symfony.
Algumas de suas features:
- utiliza a arquitetura MVC (Model View Controller), isto é, separação das camadas de apresentação, controle e modelo.
- utiliza bastantes componentes independentes como o Doctrine e Propel (ORM), YML (arquivos de configuração) e outros. Que podem ser adotados em outros projetos que não utilizam o Symfony.
- possui geração automática de CRUD (create, retrieve, update, delete)
- possui uma documentação e comunidade muito grandes.
- geração automática de telas de administração
- ambiente de desenvolvimento com debug
- ambiente de teste
- integração com sincronizador de arquivos (para atualização do projeto na produção)
- separação de configuração para ambientes de teste, desenvolvimento e produção.
- e muito mais...
Introduction to the Spring Framework:
Generar description
IoC container
Dependency Injection
Beans scope and lifecycle
Autowiring
XML and annotation based configuration
Additional features
Palestra realizada em abril de 2009 no FLISOL de Aracaju/Sergipe. O tema foi o framework orientado a objetos em PHP chamado Symfony.
Algumas de suas features:
- utiliza a arquitetura MVC (Model View Controller), isto é, separação das camadas de apresentação, controle e modelo.
- utiliza bastantes componentes independentes como o Doctrine e Propel (ORM), YML (arquivos de configuração) e outros. Que podem ser adotados em outros projetos que não utilizam o Symfony.
- possui geração automática de CRUD (create, retrieve, update, delete)
- possui uma documentação e comunidade muito grandes.
- geração automática de telas de administração
- ambiente de desenvolvimento com debug
- ambiente de teste
- integração com sincronizador de arquivos (para atualização do projeto na produção)
- separação de configuração para ambientes de teste, desenvolvimento e produção.
- e muito mais...
Olá, encontrei dificuldades para achar um conteúdo sobre Spring e Struts em português, acho que esse será uma grande apoio para quem anda pesquisando sobre isso,
por favor qualquer duvida entrem em contato comigo, pois será uma prazer ajudar
Apresentação sobre BDD (Behavior-Driven Development) realizada em 20/05/2015.
Tópicos abordados:
- Cenários comuns dentro do desenvolvimento de software
- Test-Driven Development (TDD): uma visão geral
- Testes Unitários no Visual Studio: um exemplo simples
- Behavior-Driven Development (BDD)
- BDD na plataforma .NET
Apresentação sobre BDD (Behavior-Driven Development) realizada em 06/09/2015.
Tópicos abordados:
- Cenários comuns dentro do desenvolvimento de software
- Test-Driven Development (TDD): uma visão geral
- Testes Unitários no Visual Studio: um exemplo simples
- Behavior-Driven Development (BDD)
- BDD na plataforma .NET
- Exemplo prático no Visual Studio 2015
Apresenta minimamente como funciona o docker e que instruções são utilizadas no dokerfile. No final tem uma lista de links para tutoriais e referências mais completas acerca do docker.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Esta pequena ferramenta pode ser usada no ciclo de vida do desenvolvimento de aplicações, como nasceu e revolucionou o modo como aprendemos, exploramos e ultrapassamos alguns problemas, e como alguns dos inúmeros plugins permitem analisar e orientar o desenvolvimento, e permite de forma simples e transparente o debug dentro de módulos externos à nossa aplicação.
Pair Programming
Quality
more attention on errors, less bugs
More discussions on solutions
Gambiarras not allowed
Different perspectives and sources of information
Ownership
Truck Factor > 1
All team members know whats going on
No Single Point of Failure
Productivity
Pairs keep focus
People are more afraid to interrupt
Variations
expert-expert
expert-novice
novice-expert
Don't pair
Repetitive and non-thinking tasks
Competitive environments
People don’t want to share their knowledge
Management does not encourage the practice
Environment
1 computer, 2 monitors, 2 keyboards, 2 mouses
Rotate typer
Remote
Knowledge Sharing
I know, I teach
Develop patience
Develop communication skills
I don't know, I learn
Humbleness
Teaming
Everybody feels responsible
We built together, we solve together
95% more satisfaction
Shared goals
Olá, encontrei dificuldades para achar um conteúdo sobre Spring e Struts em português, acho que esse será uma grande apoio para quem anda pesquisando sobre isso,
por favor qualquer duvida entrem em contato comigo, pois será uma prazer ajudar
Apresentação sobre BDD (Behavior-Driven Development) realizada em 20/05/2015.
Tópicos abordados:
- Cenários comuns dentro do desenvolvimento de software
- Test-Driven Development (TDD): uma visão geral
- Testes Unitários no Visual Studio: um exemplo simples
- Behavior-Driven Development (BDD)
- BDD na plataforma .NET
Apresentação sobre BDD (Behavior-Driven Development) realizada em 06/09/2015.
Tópicos abordados:
- Cenários comuns dentro do desenvolvimento de software
- Test-Driven Development (TDD): uma visão geral
- Testes Unitários no Visual Studio: um exemplo simples
- Behavior-Driven Development (BDD)
- BDD na plataforma .NET
- Exemplo prático no Visual Studio 2015
Apresenta minimamente como funciona o docker e que instruções são utilizadas no dokerfile. No final tem uma lista de links para tutoriais e referências mais completas acerca do docker.
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
Características da Programação Orientada por Objetos (POO).
Conceito de Classe, Atributos, Métodos, e Eventos.
Conceito de Objeto.
Conceito de Encapsulamento.
Conceito de Visibilidade de Classes, Métodos e Atributos.
Diagramas de Classe.
O ambiente de trabalho do Visual C#.
Objetos básicos e outras características básicas da linguagem do Visual C# e respetivo ambiente de trabalho.
Esta pequena ferramenta pode ser usada no ciclo de vida do desenvolvimento de aplicações, como nasceu e revolucionou o modo como aprendemos, exploramos e ultrapassamos alguns problemas, e como alguns dos inúmeros plugins permitem analisar e orientar o desenvolvimento, e permite de forma simples e transparente o debug dentro de módulos externos à nossa aplicação.
Pair Programming
Quality
more attention on errors, less bugs
More discussions on solutions
Gambiarras not allowed
Different perspectives and sources of information
Ownership
Truck Factor > 1
All team members know whats going on
No Single Point of Failure
Productivity
Pairs keep focus
People are more afraid to interrupt
Variations
expert-expert
expert-novice
novice-expert
Don't pair
Repetitive and non-thinking tasks
Competitive environments
People don’t want to share their knowledge
Management does not encourage the practice
Environment
1 computer, 2 monitors, 2 keyboards, 2 mouses
Rotate typer
Remote
Knowledge Sharing
I know, I teach
Develop patience
Develop communication skills
I don't know, I learn
Humbleness
Teaming
Everybody feels responsible
We built together, we solve together
95% more satisfaction
Shared goals
Technology Startups Ecosystem in China - Lessons to other ecosystemsDaniel Cukier
At the beginning of November 2016, I joined a group of 54 entrepreneurs delegation to meet Chinese startups. We had an intense week visiting companies such as Alibaba, Baidu, JD, etc, talking with entrepreneurs, investors and other ecosystem agents. Is there innovation in China? Can we consider that Chinese startups are successful? What does China represents to the futuro of technology development? What the Brazilian and other ecosystems can learn from this example? What went wrong? What went right? This slides bring some insights from this trip. They are an invite for debate about the role of the giant in the technological and economical international scene.
Software Startup Ecosystems Evolution - The New York City Case StudyDaniel Cukier
Startup ecosystems started to emerge in different parts of the world since the 2000s. They normally focus on specific areas and present different characteristics and dynamics. Also, each ecosystem has its own path of evolution over time. In this paper, we analyze the dynamics of these ecosystems by taking the New York case study as an example. We show what stages ecosystems pass through, the requirements for each of these phases and why it is possible for many ecosystems to evolve until reaching a self-sustainable level of maturity. This research can bring a better understanding of the evolution of software startup ecosystems and what role their actors play in this development. The results can be used as a basis for ecosystem stakeholders to reflect and act concretely on improving the maturity of their local environments.
Resulting from the technological revolution from the last decades, we observed many software startup ecosystems emerging around the globe. Having tech entrepreneurs as their main agents, some ecosystems exist for more than 50 years, while others are newly born. This difference in terms of evolution and maturity makes the task of comparing different tech hubs a challenge. Moreover, nascent ecosystems need a clear vision of how to develop their community to evolve towards a fruitful and sustainable ecosystem. This paper proposes a maturity model for software startup ecosystems based on a multiple case study of two existing ecosystems. By determining the maturity level for each ecosystem, it is possible not only to compare different realities, but mainly to identify gaps and propose customized practical actions that can lead to real improvements in the existing ecosystems, taking it to the next level of development, promoting innovation.
Why Google Cloud is so special? Stories from a cloud userDaniel Cukier
Hoje em dia temos muitas opções quando se trata de serviços e provedores de Cloud. Diante de tantas possibilidade, o que deveria simplificar a vida do time de tecnologia das empresas vira uma dor de cabeça. Qual a melhor nuvem? Qual a mais barata? Quais recursos eu perco ou ganho com determinado provedor? Se eu usar tal serviço, eu vou ficar preso a ele para sempre? Nessa palestra, Daniel contará sua experiência real utilizando várias nuvens, porque sua escolha atual de usar a Google Cloud e como usar seus recursos.
Introduction to Functional Programming with ScalaDaniel Cukier
Scala é uma linguagem funcional que roda na JVM. Ela possui todas as vantagens da programação funcional, com a vantagem de ser facilmente integrada com Java, além de possuir uma stack completa de desenvolvimento e deploy. Nessa palestra, daremos os primeiros passos para quem quer trabalhar com Scala. Falaremos de imutabilidade, Traits, funções e expressões lambda entre outros tópicos
O assunto startup está na moda no Brasil, principalmente nos últimos 2 anos. Mas como é de fato trabalhar numa startup? Vale a pena largar tudo para começar seu próprio negócio? O mundo de startup não só um mar de rosas não! Quais são os problemas que uma startup enfrenta? Como fugir das armadilhas? Como encontrar parceiros e investidores? Nessa palestra serão contados casos reais de startups, tanto de sucesso como de fracasso, bem como alguns aprendizados que foram acumulados.
Selecting Empirical Methods for Software EngineeringDaniel Cukier
Presentation on how to write good Master and PhD dissertations.
Empirical Methods, Software Engineering, science, computer science, software, methods, positivism, epistemology, onthology, construtivism, critical theory, pragmatism, case study, research action, ethnography
Common wisdom says that science and art are entirely different beasts; moreover, a similar source of wisdom tells us that
science is valuable to society while art is a luxury. Why else would schools drop art from their curricula over the past 20 years?
But artists and scientists approach their work in similar if not identical ways.
This presentation was created by Richard P Gabriel and presented at IME-USP - São Paulo on 31/Mar/2011 sponsored by CCSL
Richard's Bio
Richard P. Gabriel (Ph.D., Stanford University, 1981; MFA Creative Writing (Poetry), Warren Wilson College, 1998; ACM Fellow) performs programming language, creativity, and software engineering research at IBM Research. He is the author of five books. He played lead guitar in a rock ‘n’ roll band for 20 years.
Conceptual integrity arises not (simply) from one mind or from a small number of agreeing resonant minds, but from sometimes hidden co-authors and the things designed themselves.
This presentation was created by Richard P Gabriel (www.dreamsongs.com) and presented at IME-USP - São Paulo on 30/Mar/2011 sponsored by CCSL (ccsl.ime.usp.br)
When Should You Consider Meta ArchitecturesDaniel Cukier
There are times when a system must adapt to new requirements within months or weeks rather than years. These new requirements can include complicated rules and new products or services the organization needs to scale to support. As the system scales up and becomes more complicated it can become very hard to adapt quickly to these changing requirements. In fact, the system can even become harder to change and slower to accept new requirements. This can lead to a desired architecture that is designed to scale allowing the system to more easily adapt to changing requirements.
Do you have the goal of building a system that can be extended and adapted without programmer intervention? Do you have the itch to explore meta-programming, not just because it is cool or complicated, but because you want your system's behavior or domain representations to scale? If so, consider learning about the design of systems that represent user-defined behavior specifications as metadata.
Architects create Adaptive Object-Model systems when they want to enable end-user programmers to adapt their system's behavior and they don't want developers to become the bottleneck. But what does it take to build a system that can be changed and adapted without programming? How do Adaptive Object-Models differ from little languages or DSLs and when is it appropriate to consider stepping into the meta world to build such an extensible system? This talk presents the basic ideas about meta-architecture such as an Adaptive Object-Model architecture and shares experiences that the presenters have had building and tuning various production meta-architecture systems that have enabled organizations to scale them more easily and without programming wizardry.
4. Exemplo
Criando interface
public interface PhoneFinder {
List findAll();
}
Criação de instância continua obrigatória
class PhoneLister...
private PhoneFinder finder;
public PhoneLister() {
finder = new MySqlPhoneFinder("myDbName");
}
Daniel Cukier - IME/USP 4/29
5. Exemplo - Dependência
PhoneLister depende da interface e da
implementação
Como depender somente da interface?
Daniel Cukier - IME/USP 5/29
7. Tipo de Injeção de Dependência
Injeção por construtor (IoC tipo 3)
Injeção por setter (IoC tipo 2)
Injeção por interface (IoC tipo 1 – menos
usada)
*IoC – Inversion of Control
Daniel Cukier - IME/USP 7/29
8. Por construtor ex: PicoContainer
class PhoneLister...
public PhoneLister(PhoneFinder finder) {
this.finder = finder;
}
class MySqlPhoneFinder implements PhoneFinder
public MySqlPhoneFinder(String dbName) {
this.dbName = dbName;
}
Daniel Cukier - IME/USP 8/29
9. Por construtor ex: PicoContainer
private MutablePicoContainer configureContainer() {
MutablePicoContainer pico = new DefaultPicoContainer();
Define parâmetros do
Parameter[] finderParams = {new
MySQLPhoneFinder
ConstantParameter("myDBName")};
pico.registerComponentImplementation
(PhoneFinder.class, MySqlPhoneFinder.class, Registra MySQL
finderParams); PhoneFinder
pico.registerComponentImplementation(PhoneLister.class);
return pico;
}
Daniel Cukier - IME/USP 9/29
11. Spring
Focado em prover uma forma de gerenciar
seus objetos de negócio
Arquiteturado em camadas, modular. Podem
ser usadas apenas partes
Ajuda a escrever código que é fácil de testar
Daniel Cukier - IME/USP 11/29
12. Spring - Arquitetura
Ajuda a eliminar proliferação de singletons
Menos arquivos de configurações em vários
formatos diferentes
Facilita boas práticas de programação: uso de
interfaces no lugar de classes
Não envasivo: o código do sistema depende o
mínimo possível da API do Spring
Fácil de escrever testes de unidade e também de
integração (usando TestContext Framework)
Daniel Cukier - IME/USP 12/29
13. Spring - Arquitetura
Torna o uso de EJB uma escolha de implementação e
não uma decisão de arquitetura
Uma alternativa ao EJB que pode ser adequada a
muitas aplicações
Arcabouço consistente para acesso a dados, usando
JDBC ou mapeamento O/R (hibernate, jdo, etc)
Não reinventa a roda, apenas torna tecnologias
disponíveis mais fáceis de usar
Portável entre servidores de aplicação
Solução mais simples para seus problemas
Daniel Cukier - IME/USP 13/29
14. Spring – Inversão de Controle
Fábrica de beans
− Singleton
Instância única compartilhada do objeto
Uso padrão, mais comum
Objetos de serviço sem estado (stateless)
− Protótipos
Cada chamada cria um novo objeto
− Escopos de Objetos Customizados
Objetos armazenados fora do controle do container
(ex: request, session em uma aplicação Web)
Daniel Cukier - IME/USP 14/29
15. Spring - Resumo
“É uma tenologia dedicada a habilitar você a construir
aplicações usando POJOs (Plain Old Java Objects).
Permite que você crie componentes como POJOs,
contendo somente lógica de negócio, enquando o
Spring toma conta de outras coisas importantes que
você precisa numa aplicação corporativa, mesmo em
áreas que você nem havia considerado antes de
contruir sua aplicação”
Daniel Cukier - IME/USP 15/29
16. Spring - Injeção de Dependência
Como os componentes não precisam procurar
colaboradores em tempo de execução, o código
fica mais fácil de escrever e manter
Testes mais fáceis: é só criar objetos e atribuir as
propriedades desejadas usando os setters
Dependências são explícitas e evidentes
Objetos de negócio não dependem da API do
Spring
Daniel Cukier - IME/USP 16/29
18. Por setter: Spring
class PhoneLister...
private PhoneFinder finder;
public setFinder(PhoneFinder finder) {
this.finder = finder;
}
class MySqlPhoneFinder implements PhoneFinder
public setDbName(String dbName) {
this.dbName = dbName;
}
Daniel Cukier - IME/USP 18/29
19. Por setter: Spring – XML
<beans>
<bean id="PhoneLister"
class="spring.PhoneLister">
<property name="finder">
<ref local="PhoneFinder"/>
</property>
</bean>
<bean id="PhoneFinder"
class="spring.MySqlPhoneFinder">
<property name="dbName">
<value>myDBName</value>
</property>
</bean>
</beans>
Daniel Cukier - IME/USP 19/29
20. Por setter: Spring – XML
Usa-se ref para referenciar outro bean
Pode-se usar qualquer tipo básico Java, o
Spring trata de converter tipos
Possui suporte a listas, mapas, e outros tipos
de coleções
Autowiring – descobre dependência
Daniel Cukier - IME/USP 20/29
21. Por setter: Spring – teste
public void testWithSpring() throws Exception {
ApplicationContext ctx = new Cria contexto Spring
FileSystemXmlApplicationContext("spring.xml"); baseado no arquivo
XML de configuração
PhoneLister lister =
(PhoneLister) ctx.getBean("PhoneLister"); Instancia PhoneLister
Phone[] phones = lister.phonesOwnedByCompany("LW Telecom");
assertEquals("551121613500", phones[0].getNumber());
}
Daniel Cukier - IME/USP 21/29
22. Aplicação Spring em 3 passos
mvn archetype:create
-DgroupId=seuGrupo -DartifactId=seuProjeto
-DarchetypeArtifactId=appfuse-basic-spring
-DarchetypeGroupId=org.appfuse.archetypes
MySQL (Ubuntu): apt-get install mysql-server
mvn jetty:run-war
Daniel Cukier - IME/USP 22/29
23. Outros Arcabouços
PicoContainer
http://www.picocontainer.org/
uso de anotações no lugar de XML
Google Guice
http://code.google.com/p/google-guice/
também usa anotações
Azuki
http://www.azuki-framework.org/
HiveMind
http://hivemind.apache.org/
Daniel Cukier - IME/USP 23/29
24. DI – Linha do Tempo
Daniel Cukier - IME/USP 24/29
25. Construtor ou Setter?
Construtor com parâmetros deixa claro o que é preciso para
criar o objeto
Usando construtor evita campos imutáveis de serem alterados
Cuidado: contrutores com muitos parâmetros pode ser um
indicativo de objeto com responsabilidades demais
Construtor é ruim se tiver parâmetros simples como Strings:
com setter você cria um método que identifica o que a string
significa
Receita geral: comece com construtor e mude para setter se a
coisa ficar complicada demais
Daniel Cukier - IME/USP 25/29
26. Spring - Mercado
Serviços: segurança, gerenciador de sistemas,
workflow, persistência
Melhorias: vários releases por ano
Suporte: muitos arcabouços consagrados e
produtos do mercado usam Spring
Vasta literatura e documentação.
Daniel Cukier - IME/USP 26/29
27. Service Locator
Singleton que provê
serviços
class PhoneLister...
PhoneFinder finder =
ServiceLocator.phoneFinder();
class ServiceLocator...
public static PhoneFinder phoneFinder() {
return soleInstance.phoneFinder;
}
private static ServiceLocator soleInstance =
new ServiceLocator(new MySqlPhoneFinder("myDBName"));
private PhoneFinder phoneFinder;
...
Daniel Cukier - IME/USP 27/29
28. DI ou SL
O que é melhor: Injeção de Dependência ou
Service Locator?
DI SL
Desacoplamento total apenas da implementação, ainda depende de
conhecer o Locator
Clareza de fácil de identificar precisa olhar o código fonte do SL
Código dependências
Melhor Usar Muitas classes que Poucas classes dependem do SL
Quando usam serviços
Testabilidade Criando mocks dos Criando uma implementação do SL que retorne
serviços mocks
Implementação automática explícita
Daniel Cukier - IME/USP 28/29
29. Referências
http://www.springframework.org/documentation
http://martinfowler.com/articles/injection.html
http://appfuse.org/
http://www.devx.com/Java/Article/21665/0/page/1
http://www.onjava.com/pub/a/onjava/2005/05/11/spring.html
http://www.theserverside.com/tt/articles/article.tss?l=IntrotoSpring25
Anil Hemrajani, Agile Java Development with Spring, Hibernate and
Eclipse
Daniel Cukier - IME/USP 29/29