PHP Software Engineering. Programming Languages Language Features & Paradigms.

Post on 27-Mar-2015

220 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

Transcript

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

Typing

•Static vs. Dynamic

•Strong vs. Weak

•Duck Typing

Programming Languages

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

Typing

•Static vs. Dynamic

•Strong vs. Weak

•Duck Typing

Programming Languages

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

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

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

Design PatternsBuilding Blocks for Software

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)

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

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)

Example: FactoryDesign Patterns / Software Patterns

http://en.wikipedia.org/wiki/Factory_method_patternhttp://en.wikipedia.org/wiki/Creational_pattern

Example: Lazy Loading

Design Patterns / Software Patterns

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

Example: SingletonDesign Patterns / Software Patterns

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

Example: Composite

Design Patterns / Software Patterns

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

http://devzone.zend.com/node/view/id/7

Example: AdapterDesign Patterns / Software Patterns

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

Example: ObserverDesign Patterns / Software Patterns

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

http://www.php.net/~helly/php/ext/spl/

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/

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

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

Example: Domain Model

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

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

Design Patterns / Architectural Patterns

Example: Table Module

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

Design Patterns / Architectural Patterns

Example: Table Gateway

Design Patterns / Architectural Patterns

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

Example: Row Gateway

Design Patterns / Architectural Patterns

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

Example: Active Record

Design Patterns / Architectural Patterns

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

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

Example: Active Record

Design Patterns / Architectural Patterns

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

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

Example: MVCDesign Patterns / Architectural Patterns

http://en.wikipedia.org/wiki/Model-view-controller

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

Example: RegistryDesign Patterns / Architectural Patterns

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

Software Development

ProcessBest Practices for Building Software

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

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

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

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

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

PHP EcosystemSoftware & Tools

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

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

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)

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

top related