Download Methodologies

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Ada (programming language) wikipedia , lookup

C Sharp syntax wikipedia , lookup

Software quality wikipedia , lookup

Name mangling wikipedia , lookup

Flow-based programming wikipedia , lookup

Stream processing wikipedia , lookup

Logic programming wikipedia , lookup

Class (computer programming) wikipedia , lookup

Go (programming language) wikipedia , lookup

Operational transformation wikipedia , lookup

Design Patterns wikipedia , lookup

Control flow wikipedia , lookup

Programming language wikipedia , lookup

Corecursion wikipedia , lookup

Object-relational impedance mismatch wikipedia , lookup

Functional programming wikipedia , lookup

C++ wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

Falcon (programming language) wikipedia , lookup

Reactive programming wikipedia , lookup

Abstraction (computer science) wikipedia , lookup

Structured programming wikipedia , lookup

Object-oriented programming wikipedia , lookup

Transcript
PC204
Lecture 5
Programming Methodologies
Copyright 2000 by Conrad Huang and the Regents of the University of California.
All rights reserved.
Programming Paradigms
• Software Engineering
• Exploratory Programming
Software Engineering
•
•
•
•
•
•
Requirements
Specification
Design
Coding
Verification
Debugging
•
•
•
•
Documentation
Dissemination
Maintenance
Enhancement
Why Doesn’t It Work (for us)?
• Fuzzy requirements
• The most important phase is often is least
well defined, especially in a research
environment
Exploratory Programming
•
•
•
•
Faster feedback loop
Standard components
Reusable components
Rapid Application Development (RAD)
Methodologies
•
•
•
•
•
•
•
Functional decomposition
Structured programming
Modular programming
Object-oriented programming
Generic programming
Extreme programming
Agile programming
What’s the Difference?
• Methodologies may be applied for any
programming language
• Some languages are easier (or harder) to use
with some methodologies
• The outward appearance of a program is
frequently determined by the language, but
the methodology may be discerned from
code organization
Evaluation Criteria
•
•
•
•
Correctness
Maintainability
Flexibility
Reusability
Functional Decomposition
• Divide problem into
phases
• Flowchart diagrams
• “Input, compute,
output”
• Algorithm for each
phase
• Fortran
•
•
•
•
Correctness - okay
Maintainability - okay
Flexibility - limited
Reusability - limited
Functional Decomposition
yes
no
yes
no
loop
Structured Programming
•
•
•
•
Local organization
No “go to”s
Use functions
Characterized as “just
indentations” by
unbelievers
• Fortran, C, Pascal
• Correctness - okay
• Maintainability - better
– more readable code
• Flexibility - okay
– simpler to reorganize
• Reusability - better
– reuse functions
Structured Programming
Function
yes
Function
no
yes
no
loop
Modular Programming
• Group related data and
functions together
• Module functions
operate on module data
• Interface vs.
Implementation
• Data abstraction and
data encapsulation
• C, Algol, Ada
• Correctness - good
– module-based testing
• Maintainability - good
– localized changes
• Flexibility - better
• Reusability - better
– reuse entire modules
Modular Programming
Module
Module
Module
Object-oriented Programming
• Formalize convention
of always passing
module data structures
to module functions
• Class: definition of
data and the functions
that operate on them
• Object: data created
from class definition
• Smalltalk, C++, Java
• Correctness - good
• Maintainability - better
– guaranteed internal
consistency
• Flexibility - better
• Reusability - better
– reuse concepts
Object-oriented Programming
Instance
Instance
Class
Instance
Instance
Class
Generic Programming
• Back to algorithms
• Objects that share the same interface can be
generically manipulated
• Toolkits of objects and algorithms
What Is A Good Design?
• Too few classes, and code is limited in
flexibility and reusability
– lacks cohesion
• Too many classes, and code is more difficult
to verify and maintain
– too much coupling
• Design is still an art form
Design vs. Coding
• Coding from a design is much simpler than
“hacking” because most of the hard work has
been done
• Sometimes you have to hack to find the right
design
Ouch
Design
Coding
Debugging
Evaluation
Deployment
Object-oriented Programming
• Languages that support object-oriented
programming have built-in concept of class
• In addition to design, object-oriented
programming also features inheritance
• Base class defines behavior; derived class
defines new or redefines base behavior
• Simplifies code reuse
Reference Material
• Object Oriented Design with Applications,
Grady Booch
• Object-oriented Software Construction,
Bertrand Meyer
• Software Tools, Brian Kernighan, et al.