Documente Academic
Documente Profesional
Documente Cultură
Object Oriented
Programming Techniques
Computational Models
Fundamental Concepts
Sequential Programming
Concurrent Programming
Parallel Programming
Distributed Programming
Classes of Algorithms
the problem
Understanding the solution
Problem - Solution
Decomposition / Construction view
Problem Decomposition
Solution Construction
Problem
Decomposition
SET
Sub-Problems
Solution
Construction
SET
Sub-Problems
Problem - Solution
Details
Problem
Domain (PD)
processes
PD Observable
results
data
abstraction
process
compare and
assess
improve
Algorithms
Model
SD results
Programs
Solution
Domain (SD)
USER
- queries
Problem - Solution
Modeling gap
Modeling
Semantic Gap
Modeling
OO Modeling
data abstraction and ADTs
class dual meaning
Software Construction
Needs
System
System valid./
Testing
Requirements
Integration /
Testing
Design
Software Construction
Unit Coding /
Testing
Design
Objective:
Obtain a good
(sub)system
(partial) reuse existent resources;
(partial) new code
Design
complexity
designers
Use heuristics
Design dimensions
Main design dimensions (heuristics)
1. Find abstractions
2. Encapsulate implementation details
3. Hide secret parts (information hiding)
4. Inherit and / or delegate
5. Anticipate changes
6. Keep coupling loose and cohesion strong
7. Look for common design patterns
8. Think of associating things
Other design dimensions
9. Keep design's modularity (black box
approach of its parts)
10. Draw diagrams and document the design
11. Judiciously assign responsibilities and
design class interfaces
12. Design for test
10
Design documentation
UML
diagrams
CRC cards (class, responsibility,
collaboration)
Document the design into the code
Wiki pages for collaborative
designs
Other (text, emails, images, etc)
11
Desirable design
features
External
features
Internal features
12
tolerant
Maintainability
Robustness
Security
Interoperability
Portability
Usability
Functionality
System
integrity
Consistency
Efficiency
13
complexity
Ease of maintenance
Loose coupling among design
(program) parts
Extensibility / Scalability
Reusability
High fan-in
Low to medium fan-out
Stratification
Standard techniques.
14
external criteria
Models
McCall (1977)
Boehm (1978)
ISO 9126 (1990)
Dromey (1996)
15
Software Construction
Details
Software
construction
construction - a three
phase process:
problem decomposition
coding / testing the units
solution composition
16
Integration
System
Software construction
Objectives and Features
Analysis,
Refactoring, Code tuning
Existing
Code
Knowledge,
Techniques,
Resources,
Methods
New Built
Solid Code
Features
External
Reliability
Performance
Failure tolerant
Maintenance
Portability
Interoperability
Security
Testability
Internal
Reusable
Extensible / Scalable
Low complexity
Loose coupling
High fan-in
Low to medium fan-out
Completeness
Standardized
18
Software Construction
Heuristics
Heuristic
[Wikipedia]
19
in OO software construction
Identify objects, their behavior,
attributes
What can be done to each object
What each object is allowed to do to
other objects
Determine
20
a way of approaching
complexity
Hierarchy of abstractions
At each level underlines important
features and ignoring the details
Examples
At a given level of abstraction house is a
combination of bricks, glasses, doors,
roof, timber and mortar
At another level - door is an abstraction of
a collection of rectangular pieces of
materials, knob, small window, etc.
At a higher level - village - a collection
of houses as a is another abstraction
Base
classes as abstractions
Interfaces as abstractions
21
details of object o1
should not be revealed to other
objects
Other objects should be only aware of
the behavior of o1
Example
Encapsulation
and complexity
Encapsulation at class level design
22
23
is a concept related to
aggregation
A complex object consists of a set of
objects of lower complexity
A method that is invoked in
association with the complex object
delegates parts of its functionality to
lower level component objects
Example
24
hiding
information hiding
Examples
25
and accommodate
changes
attribute of a good program design
Isolate
unstable areas
26
Types
of coupling
27
functional (desirable)
sequential
communicational
procedural
temporary
logical
coincidental (non desirable)
28
29
Design Practices
Iterate
Divide
et Impera
Design
30
Design Practices
Divide et Impera - Top Down
(Procedural Development)
Problem
domain
Abstraction
Stub
Module
Stub
Module
Stub
Module
Procedural
Abstraction
Proc
Proc
Proc
Proc
31
Design Practices
Divide et Impera Bottom Up
(OO development)
Integration
Driver
Integration
Driver
Driver
Integration
Driver
Driver
Class
Class
Driver
Class
Implementation
ADT
...
ADT
Abstraction,
Data Abstraction
Problem
domain
32
Part 2
Programming
Paradigms
Objective
33
Programming features
(Computer)
Programming
dimensions
simple, complex,
small, large,
IO intensive,
algorithmic intensive,
data intensive
Modern
problem
Problem - Programming Language
mapping
Are there any decision metrics??
Computational Models
Computing Model Main Abstractions
Procedural Oriented
Object Oriented
Procedures
Algorithms
Substitution principle
Objects and classes
Rule Oriented
If-then rules
Logic Oriented
Constraint Oriented
Invariant relationships
Programming paradigms
Procedural programming
features
Representative languages: Fortran, Algol 60, Cobol,
Pascal, C (partial C++)
OOP
main features
Simula, Smalltalk, C++, Java, C#
Concurrent programming
main features
PL/I, Algol 68, Modula, Ada83, Ada95
Functional programming
main features
Lisp, ML, Haskel
Logic programming:
main features
Prolog
Scripting languages
main features
Ruby
Uniprocessor
Sequential Sequential
Execution
Multiprocessor
Multiprogramming
Concurrent Apparent
Real
concurrency Concurrency
Sequential Programming
Execution
Concurrent Programming
Concurrent
program
support
mono,
multi,
parallel or
distributed processors
Transform
sequential to concurrent
programming
Concurrent programming
(cont.)
Concurrent
programming
41
Parallel programming
Special
form of concurrent
programming
Multiple physical processors
Memory sharing
Parallel programming
Approaches
to constructing parallel
applications:
Functional parallelism
Masterslave parallelism
SPMD parallelism
same code, replicated to each process
Parallel
Decomposing tasks
Distributing tasks
Coordinating tasks
Distributed programming
Special
form of concurrent
programming
multiple physical processors
remotely located
no shared memory
Interprocess
communication
communication channels
message exchange
Classes of Algorithms /
Programming by data handling
Transformational
programming
Classes of Algorithms /
Programming by data handling
Reactive
programming