SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
MELHORANDO SEU
CÓDIGO
Law of Demeter
Tell,
don’t ask
Sobre mim
@nelson_senna
https://nelsonsar.github.io
DRY?
YAGNI?
SOLID?
TELL DON’T ASK
LAW OF DEMETER
DDD!
–Alan Kay
“The key in making great and growable
systems is much more to design how its
modules communicate rather than what
their internal properties and behaviors
should be.”
class Paperboy
attr_reader :wallet
def initialize(wallet)
@wallet = wallet
end
def receive_from(customer, amount)
if customer.wallet.try(:amount).to_f > amount
@wallet.amount = amount
customer.wallet = customer.wallet.amount - amount
else
nil
end
end
end
class Paperboy
attr_reader :wallet
def initialize(wallet)
@wallet = wallet
end
def receive_from(customer, amount)
if customer.wallet.try(:amount).to_f > amount
@wallet.amount = amount
customer.wallet = customer.wallet.amount - amount
else
nil
end
end
end
class Paperboy
attr_reader :wallet
def initialize(wallet)
@wallet = wallet
end
def receive_from(customer, amount)
if customer.wallet.try(:amount).to_f > amount
@wallet.amount = amount
customer.wallet = customer.wallet.amount - amount
else
nil
end
end
end
–Ruby Science
“Referencing another object’s state
directly couples two objects together
based on what they are, rather than on
what they do.”
DE FORMA PRÁTICA
describe Paperboy do
describe '#receive_from' do
let(:paperboy) { described_class.new(Wallet.new(0)) }
context 'when customer has enough money to pay' do
it 'add due amount to wallet' do
customer = double
allow(customer).to receive(:wallet).and_return(Wallet.new(10))
paperboy.receive_from(user, 5)
expect(paperboy.wallet.amount).to eq(5)
end
end
end
end
describe Paperboy do
describe '#receive_from' do
let(:paperboy) { described_class.new(Wallet.new(0)) }
context 'when customer has enough money to pay' do
it 'add due amount to wallet' do
customer = double
allow(customer).to receive(:wallet).and_return(Wallet.new(10))
paperboy.receive_from(user, 5)
expect(paperboy.wallet.amount).to eq(5)
end
end
end
end
describe Paperboy do
describe '#receive_from' do
let(:paperboy) { described_class.new(Wallet.new(0)) }
context 'when customer has enough money to pay' do
it 'add due amount to wallet' do
customer = double
allow(customer).to receive(:wallet).and_return(Wallet.new(10))
paperboy.receive_from(user, 5)
expect(paperboy.wallet.amount).to eq(5)
end
end
end
end
E ISSO TEM UM
CHEIRINHO…
–Reek doumentation
“Feature Envy occurs when a code fragment
references another object more often than it
references itself, or when several clients do the
same series of manipulations on a particular type of
object.”
NÃO SE CONVENCEU?
def associate_user
@order ||= current_order
if try_spree_current_user && @order
if @order.user.blank? || @order.email.blank?
@order.associate_user!(try_spree_current_user)
end
end
end
TELL, DON’T ASK
–Martin Fowler
“It reminds us that rather than asking an
object for data and acting on that data,
we should instead tell an object what
to do.”
class Order
def apply_discount(promotion)
if promotion.eligible?(shipment)
promotion.activate(shipment)
end
end
end
class Order
def apply_discount(promotion)
if promotion.eligible?(shipment)
promotion.activate(shipment)
end
end
end
LAW OF DEMETER
–Ruby Science
“The law restricts how deeply a method
can reach into another object’s dependency
graph, preventing any one method from
becoming tightly coupled to another
object’s structure.”
class Paperboy
attr_reader :wallet
def initialize(wallet)
@wallet = wallet
end
def receive_from(customer, amount)
if customer.wallet.try(:amount).to_f > amount
@wallet.amount = amount
customer.wallet = customer.wallet.amount - amount
else
nil
end
end
end
class Paperboy
attr_reader :wallet
def initialize(wallet)
@wallet = wallet
end
def receive_from(customer, amount)
self.wallet.add(customer.pay(amount))
end
end
NULL OBJECT
–Martin Fowler
“Instead of returning null, or some
odd value, return a Special Case that
has the same interface as what the
caller expects.”
def associate_user
@order ||= current_order
if try_spree_current_user && @order
if @order.user.blank? || @order.email.blank?
@order.associate_user!(try_spree_current_user)
end
end
end
def try_spree_current_user
if respond_to?(:spree_current_user)
spree_current_user
elsif respond_to?(:current_spree_user)
current_spree_user
else
Guest.new
end
end
DESVANTAGENS E
CUIDADOS
https://github.com/troessner/reek
PRINCÍPIOS DEVERIAM
AJUDAR E NÃO
CONFUNDIR
DÚVIDAS
REFERÊNCIAS
• http://www.dan-manges.com/blog/37
• http://www.virtuouscode.com/2011/06/28/do-or-do-not-there-is-no-try/
• http://gmoeck.github.io/2011/09/28/why-you-should-care-about-information-hiding.html
• http://blog.davidchelimsky.net/blog/2006/11/27/fighting-the-urge-to-ask/
• http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/demeter.pdf
• martinfowler.com/bliki/TellDontAsk.html
• https://adamcod.es/2013/11/22/tell-dont-ask.html
• https://pragprog.com/articles/tell-dont-ask
• https://edelpero.svbtle.com/most-common-mistakes-on-legacy-rails-apps
• http://www.mockobjects.com/2006/10/tell-dont-ask-and-mock-objects.html
• https://robots.thoughtbot.com/tell-dont-ask
• https://skillsmatter.com/skillscasts/8611-tell-dont-ask
• https://www.javacodegeeks.com/2015/11/tell-dont-ask.html
• http://natpryce.com/articles/000777.html
REFERÊNCIAS
• http://martinfowler.com/bliki/GetterEradicator.html
• http://verraes.net/2014/09/objects-as-contracts-for-behaviour/
• https://medium.com/skyfishtech/retracing-original-object-oriented-
programming-f8b689c4ce50#.yk9k1s7ku
• http://brightonruby.com/2016/the-point-of-objects-john-cinnamond/
• https://github.com/spree/spree/blob/master/core/app/models/spree/
promotion_handler/page.rb
• https://github.com/troessner/reek/blob/master/docs/Feature-
Envy.md

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSSTDC2016POA | Trilha Web - A essência do CSS
TDC2016POA | Trilha Web - A essência do CSS
 
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
TDC2016POA | Trilha Web - Garanta a segurança de suas aplicações Web com Keyc...
 
Levando seu app do iOS para o macOS
Levando seu app do iOS para o macOSLevando seu app do iOS para o macOS
Levando seu app do iOS para o macOS
 
Agilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASSAgilizando o desenvolvimento web com SASS
Agilizando o desenvolvimento web com SASS
 
TDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestruturaTDC 2016 - Garantindo a qualidade da sua infraestrutura
TDC 2016 - Garantindo a qualidade da sua infraestrutura
 
TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.TDC 2016 - Sass: CSS com super-poderes.
TDC 2016 - Sass: CSS com super-poderes.
 
TDC2016POA | Trilha Arquitetura - Onion Architecture
TDC2016POA | Trilha Arquitetura - Onion ArchitectureTDC2016POA | Trilha Arquitetura - Onion Architecture
TDC2016POA | Trilha Arquitetura - Onion Architecture
 
TDC2016POA | Trilha Arquitetura - CQRS e Event Driven Architecture valem a p...
TDC2016POA | Trilha Arquitetura -  CQRS e Event Driven Architecture valem a p...TDC2016POA | Trilha Arquitetura -  CQRS e Event Driven Architecture valem a p...
TDC2016POA | Trilha Arquitetura - CQRS e Event Driven Architecture valem a p...
 
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
TDC POA 2016 - Robotium + Cucumber + Gradle, misture com spoon e tenha uma ex...
 
Como ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadoresComo ensinei mais de 1000 testadores
Como ensinei mais de 1000 testadores
 
TDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.ioTDC2016POA | Trilha Web - Realtime applications com Socket.io
TDC2016POA | Trilha Web - Realtime applications com Socket.io
 
Apresentação tdc 2016 - trilha de testes
Apresentação tdc   2016 - trilha de testesApresentação tdc   2016 - trilha de testes
Apresentação tdc 2016 - trilha de testes
 
A transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile TesterA transição de um QA tradicional para um Agile Tester
A transição de um QA tradicional para um Agile Tester
 
TDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e MarketingTDC Floripa 2015 - Branding, UX e Marketing
TDC Floripa 2015 - Branding, UX e Marketing
 
Tdc 5 ideias para melhorar os seus testes
Tdc   5 ideias para melhorar os seus testesTdc   5 ideias para melhorar os seus testes
Tdc 5 ideias para melhorar os seus testes
 
Ensinando e aprendendo com desafios
Ensinando e aprendendo com desafiosEnsinando e aprendendo com desafios
Ensinando e aprendendo com desafios
 

Ähnlich wie TDC2016POA | Trilha Ruby - Melhorando seu código com Law of Demeter e Tell don't ask

How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
Mike Harris
 
Uses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & StubsUses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & Stubs
PatchSpace Ltd
 
Microservices Coordination using Saga
Microservices Coordination using SagaMicroservices Coordination using Saga
Microservices Coordination using Saga
Eran Levy
 

Ähnlich wie TDC2016POA | Trilha Ruby - Melhorando seu código com Law of Demeter e Tell don't ask (20)

Clean code
Clean codeClean code
Clean code
 
The Law of Demeter
The Law of DemeterThe Law of Demeter
The Law of Demeter
 
Value Objects
Value ObjectsValue Objects
Value Objects
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Learning puppet chapter 2
Learning puppet chapter 2Learning puppet chapter 2
Learning puppet chapter 2
 
Talking to strangers causes train wrecks
Talking to strangers causes train wrecksTalking to strangers causes train wrecks
Talking to strangers causes train wrecks
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)
 
The Quest for Global Design Principles
The Quest for Global Design PrinciplesThe Quest for Global Design Principles
The Quest for Global Design Principles
 
Webinar: Simpler Semantic Search with Solr
Webinar: Simpler Semantic Search with SolrWebinar: Simpler Semantic Search with Solr
Webinar: Simpler Semantic Search with Solr
 
The well tempered search application
The well tempered search applicationThe well tempered search application
The well tempered search application
 
ETL into Neo4j
ETL into Neo4jETL into Neo4j
ETL into Neo4j
 
Clean Code
Clean CodeClean Code
Clean Code
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
 
Lazy, Lazy, Lazy all the things !
Lazy, Lazy, Lazy all the things !Lazy, Lazy, Lazy all the things !
Lazy, Lazy, Lazy all the things !
 
apidays LIVE Jakarta - The shell game called eventual consistency by Dasith W...
apidays LIVE Jakarta - The shell game called eventual consistency by Dasith W...apidays LIVE Jakarta - The shell game called eventual consistency by Dasith W...
apidays LIVE Jakarta - The shell game called eventual consistency by Dasith W...
 
The quest for global design principles - PHP Benelux 2016
The quest for global design principles - PHP Benelux 2016The quest for global design principles - PHP Benelux 2016
The quest for global design principles - PHP Benelux 2016
 
Uses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & StubsUses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & Stubs
 
Microservices Coordination using Saga
Microservices Coordination using SagaMicroservices Coordination using Saga
Microservices Coordination using Saga
 
Objects, Testing, and Responsibility
Objects, Testing, and ResponsibilityObjects, Testing, and Responsibility
Objects, Testing, and Responsibility
 

Mehr von tdc-globalcode

Mehr von tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Kürzlich hochgeladen

Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
kauryashika82
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
heathfieldcps1
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 

Kürzlich hochgeladen (20)

The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 

TDC2016POA | Trilha Ruby - Melhorando seu código com Law of Demeter e Tell don't ask