php software engineering. programming languages language features & paradigms

39
PHP Software Engineering

Upload: alexa-lancaster

Post on 27-Mar-2015

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: PHP Software Engineering. Programming Languages Language Features & Paradigms

PHP Software Engineering

Page 2: PHP Software Engineering. Programming Languages Language Features & Paradigms

Programming Languages

Language Features & Paradigms

Page 3: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

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

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

Design PatternsBuilding Blocks for Software

Page 9: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

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

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

Example: SingletonDesign Patterns / Software Patterns

http://en.wikipedia.org/wiki/Singleton_pattern

Page 15: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

Example: AdapterDesign Patterns / Software Patterns

http://en.wikipedia.org/wiki/Adapter_pattern

Page 17: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

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

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

Example: Table Module

http://martinfowler.com/eaaCatalog/tableModule.html

Design Patterns / Architectural Patterns

Page 23: PHP Software Engineering. Programming Languages Language Features & Paradigms

Example: Table Gateway

Design Patterns / Architectural Patterns

http://martinfowler.com/eaaCatalog/tableDataGateway.html

Page 24: PHP Software Engineering. Programming Languages Language Features & Paradigms

Example: Row Gateway

Design Patterns / Architectural Patterns

http://martinfowler.com/eaaCatalog/rowDataGateway.html

Page 25: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

Example: RegistryDesign Patterns / Architectural Patterns

http://martinfowler.com/eaaCatalog/registry.html

Page 29: PHP Software Engineering. Programming Languages Language Features & Paradigms

Software Development

ProcessBest Practices for Building Software

Page 30: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

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

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

PHP EcosystemSoftware & Tools

Page 36: PHP Software Engineering. Programming Languages Language Features & Paradigms

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

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

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

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