Top Banner
PHP Software Engineering
39

PHP Software Engineering. Programming Languages Language Features & Paradigms.

Mar 27, 2015

Download

Documents

Alexa Lancaster
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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