php software engineering. programming languages language features & paradigms
TRANSCRIPT
![Page 1: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/1.jpg)
PHP Software Engineering
![Page 2: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/2.jpg)
Programming Languages
Language Features & Paradigms
![Page 3: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/3.jpg)
Paradigms•Imperative vs. Declarative
•Object Oriented
•Class / Inheritance
•Prototype based
•Procedural
Programming Languages
http://en.wikipedia.org/wiki/Programming_paradigmshttp://en.wikipedia.org/wiki/Imperative_programminghttp://en.wikipedia.org/wiki/Declarative_programming
http://en.wikipedia.org/wiki/Object-oriented_programminghttp://en.wikipedia.org/wiki/Class-based_programming
http://en.wikipedia.org/wiki/Prototype-based_programminghttp://en.wikipedia.org/wiki/Procedural_programming
![Page 4: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/4.jpg)
Typing
•Static vs. Dynamic
•Strong vs. Weak
•Duck Typing
Programming Languages
http://en.wikipedia.org/wiki/Type_system
![Page 5: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/5.jpg)
Typing
•Static vs. Dynamic
•Strong vs. Weak
•Duck Typing
Programming Languages
http://en.wikipedia.org/wiki/Type_system
![Page 6: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/6.jpg)
Compiled vs. Scripting•Compiled (machine code)
•c, c++
•Compiled (byte-code)
•Java, C# (.net)
•Scripting
•PHP, Ruby, Python, ECMAScript (Java / Action)
Programming Languages
http://en.wikipedia.org/wiki/Scripting_languagehttp://en.wikipedia.org/wiki/Compiled_language
http://en.wikipedia.org/wiki/Virtual_machinehttp://en.wikipedia.org/wiki/Just-in-time_compilation
![Page 7: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/7.jpg)
PHP•Scripting Language
•Virtual Machine: Zend Engine
•Written in C
•Multi-paradigm
•Imperative (procedural)
•Object-oriented (inheritance)
•Weak dynamic typing
Programming Languages
http://en.wikipedia.org/wiki/Zend_Enginehttp://en.wikipedia.org/wiki/PHP
![Page 8: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/8.jpg)
Design PatternsBuilding Blocks for Software
![Page 9: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/9.jpg)
Overview•Applications
•Model 1
•Model 2
•Programming Patterns
•Architectural Patterns
Design Patterns
http://en.wikipedia.org/wiki/Model_1http://en.wikipedia.org/wiki/Model_2
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
![Page 10: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/10.jpg)
Model 1 vs. Model 2•Coined in the Java world
•Model 1 apps are procedural applications
•Typically built as a series of scripts, original JSP pages
•Model 2 apps are tiered applications and/or applications that have separation of concerns
Design Patterns
http://en.wikipedia.org/wiki/Model_1http://en.wikipedia.org/wiki/Model_2
http://en.wikipedia.org/wiki/Separation_of_concernhttp://en.wikipedia.org/wiki/Separation_of_presentation_and_content
![Page 11: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/11.jpg)
Programming Patterns
•Most notable source: Gang of Four
•Object oriented design patterns
Design Patterns
http://en.wikipedia.org/wiki/Design_Patterns_(book)http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
![Page 12: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/12.jpg)
Example: FactoryDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Factory_method_patternhttp://en.wikipedia.org/wiki/Creational_pattern
![Page 13: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/13.jpg)
Example: Lazy Loading
Design Patterns / Software Patterns
http://en.wikipedia.org/wiki/Lazy_initialization_pattern
![Page 14: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/14.jpg)
Example: SingletonDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Singleton_pattern
![Page 15: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/15.jpg)
Example: Composite
Design Patterns / Software Patterns
http://en.wikipedia.org/wiki/Composite_pattern
http://devzone.zend.com/node/view/id/7
![Page 16: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/16.jpg)
Example: AdapterDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Adapter_pattern
![Page 17: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/17.jpg)
Example: ObserverDesign Patterns / Software Patterns
http://en.wikipedia.org/wiki/Observer_pattern
http://www.php.net/~helly/php/ext/spl/
![Page 18: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/18.jpg)
Programming Patterns
•Most notable source: Martin Fowler
•PoEAA: Patterns of Enterprise Application Architecture
Design Patterns
http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)http://martinfowler.com/eaaCatalog/
http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/
![Page 19: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/19.jpg)
Non-PoEAA
•Presentation-abstraction-control
•Service-oriented architecture (distributed)
•Mulit/Three-Tier
•Peer-to-Peer (distributed)
Design Patterns / Architectural Patterns
http://en.wikipedia.org/wiki/Presentation-abstraction-controlhttp://en.wikipedia.org/wiki/Service-oriented_architecture
http://en.wikipedia.org/wiki/Three-tier_(computing)http://en.wikipedia.org/wiki/Peer-to-peer
![Page 20: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/20.jpg)
PoEAA•Logical: Domain Model & Table Module
•Data: Table Row & Row Data Gateway, ActiveRecord, Data Mapper
•Other:
•Repository, Registry, Plugin
•Model-View-Controller, Front Controller, Two-step View
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/http://en.wikipedia.org/wiki/Active_record_pattern
![Page 21: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/21.jpg)
Example: Domain Model
http://en.wikipedia.org/wiki/Domain_Model
http://martinfowler.com/eaaCatalog/domainModel.html
Design Patterns / Architectural Patterns
![Page 22: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/22.jpg)
Example: Table Module
http://martinfowler.com/eaaCatalog/tableModule.html
Design Patterns / Architectural Patterns
![Page 23: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/23.jpg)
Example: Table Gateway
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/tableDataGateway.html
![Page 24: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/24.jpg)
Example: Row Gateway
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/rowDataGateway.html
![Page 25: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/25.jpg)
Example: Active Record
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/activeRecord.html
http://en.wikipedia.org/wiki/Active_record_pattern
![Page 26: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/26.jpg)
Example: Active Record
Design Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/activeRecord.html
http://en.wikipedia.org/wiki/Active_record_pattern
![Page 27: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/27.jpg)
Example: MVCDesign Patterns / Architectural Patterns
http://en.wikipedia.org/wiki/Model-view-controller
http://martinfowler.com/eaaCatalog/modelViewController.html
![Page 28: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/28.jpg)
Example: RegistryDesign Patterns / Architectural Patterns
http://martinfowler.com/eaaCatalog/registry.html
![Page 29: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/29.jpg)
Software Development
ProcessBest Practices for Building Software
![Page 30: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/30.jpg)
Development Process
http://en.wikipedia.org/wiki/Programming_stylehttp://martinfowler.com/articles/continuousIntegration.html
http://en.wikipedia.org/wiki/Unit_testinghttp://en.wikipedia.org/wiki/Revision_control
Overview
•Unit Testing
•Source Control
•Coding Standards
•Continuous Integration
•Documentation
![Page 31: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/31.jpg)
Development Process
http://en.wikipedia.org/wiki/XUnit
Unit Testing•Why write unit tests?
•prevent regressions
•ensure software meets requirements
•tests help document what the software does
•XUnit pattern
•unit testing framework with equivalents in PHP, Java, Ruby, C#, and more
•XUnit is one of the most popular ways to test code
![Page 32: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/32.jpg)
Development Process
http://subversion.tigris.org/http://git-scm.com/
http://www.github.comhttp://en.wikipedia.org/wiki/Distributed_revision_control
Source Control
•Why use source control?
•Keep track of changes you made
•Light-weight backup
•Great for collaboration, even if there is only one of you now
•Common SCM (Source Code Management) tools
•Subversion (SVN)
•widely used, well-supported by tools
•client-server model, integrates well with Apache
•Git
•distributed model, trendy
•somewhat high learning curve, especially if you’re used to SVN or CVS
![Page 33: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/33.jpg)
Development Process
http://pear.php.net/pepr/pepr-proposal-show.php?id=426http://pear.php.net/manual/en/standards.php
http://framework.zend.com/manual/en/coding-standard.html
Coding Standards•Why have coding standards?
readability for yourself and colleaguesprevents mistakes, syntax errorsPear Coding Standardsdon't write your own standards, its not worth your timePear standards are commonly accepted, and align with other languages as well
![Page 34: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/34.jpg)
Development Process
http://cruisecontrol.sourceforge.net/http://code.google.com/p/xinc/
http://www.atlassian.com/software/bamboo/
Build & Deploy•Create a testable and repeatable deployment process
•Run some functional testsdocument your application
•Code comments
•API Docs
•automate - take the human out of it
•continuous integration
•find the right level of process
![Page 35: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/35.jpg)
PHP EcosystemSoftware & Tools
![Page 36: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/36.jpg)
PHP Ecosystem
http://framework.zend.com/http://codeigniter.com/
http://cakephp.org/http://www.symfony-project.org/
http://en.wikipedia.org/wiki/Web_application_framework
Application Frameworks•Application Framework
•Zend Framework
•toolkit / glue style: use what you want or use it all
•CakePHP & CodeIgnitor
•lightweight MVC frameworks with data models
•SymfonyMVC, more admin and configuration features
![Page 37: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/37.jpg)
PHP Ecosystem
http://www.simpletest.org/http://phpt.info/
http://en.wikipedia.org/wiki/Unit_testinghttp://www.phpunit.de/
Unit Testing Frameworks
•PHPUnit
•Most popular, derived from NUnit patternSimpletest
•phpt
![Page 38: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/38.jpg)
PHP Ecosystem
http://en.wikipedia.org/wiki/Comparison_of_text_editorshttp://en.wikipedia.org/wiki/Integrated_development_environment
http://www.xdebug.org/
IDEs & Editors•Editors
•pattern matched syntax highlighting & code foldingtypically multi-languageespecially good at text & code manipulationIDEsLanguage introspection (code completion)Errors / Warnings / Syntax CheckDebugging capabilities (breakpoints, watches, profiling)
![Page 39: PHP Software Engineering. Programming Languages Language Features & Paradigms](https://reader035.vdocument.in/reader035/viewer/2022062618/55146d8d550346b0158b4eb3/html5/thumbnails/39.jpg)
PHP Ecosystem
http://www.zend.com/en/products/studio/http://www.eclipse.org/pdt/http://www.ultraedit.com/http://www.aptana.com
http://www.macromates.com
IDEs & Editors•Eclipse-based IDEsZend Studio (paid) / PDT (open source)
•great PHP editing and debugging
• Aptana
•javascript & css editing & code completion is excellentdebugging with xdebugText Editors
•Ultraedit on WindowsTextmate on Mac
•“E” is Textmate on Windows