Programming is an activity of designing Software Applications and Interactive Media.
A Software Application is a Control System with Digital Interfaces suited for the particular Domain.
Data, Components and Flows constitute the Constrol System of the Software .
- ER / Binary / XML / Object / EAV / File
- Queries / Commands
- Storage and Caching
- Indexing / Searching / Tagging / Learning
- Events / Messages
- Snapshot + Restore
- State / Context / Session
- Protocol / Format
- Language + Parsing + Validation
An Active Component has a
- A life cycle
- A way to get inputs and interrupts
- An execution body
- A way to delegate outputs
- A way to trigger events and alerts
Execution body is made of
- System Calls and Instructions
- Decisions and Loops
- Passive Components
A Passive Component is just made of execution body.
A set of Related Components is a Module.
Module manages dependencies and Component locations as well.
Active Components can be,
- Forms / Widgets
Flows are Data Driven on Demand Driven.
Flow occurs between component couplings.
Data flows across a coupling.
How to build components and flows ?
Function is a Passive Component.
Activte components can be built with the following,
- Mutual Recursion
- Threads / Processes / Active Objects
- Objects with a single public method
Passive Component Coupling
- Function Calls
- Function Pointers
Active Component Coupling
- Interceptors / Delegates
User Interface Coupling
- Half Objects
- Request / Response
Never store state inside a Component. State should either be stored in Data or in transient Event objects.
Object Oriented Programming encourages storing State. DO NOT FOLLOW IT. Object Oriented Programming is an excellent choice for ADTs.
- Gather User Stories
- Map User Story to an Interface
- Design Data
- Couple User Interfaces to Observers and Observers to Components
- Couple Components
- Simulate / Demo
Characteristics of Software
- Version Control
- Horizontal and Vertical Scaling
- End User Simulation
- Stress Testing
- Edge Case Testing
- Security Testing
- Component Testing
- Component Internals Testing
Data / Events Should follow structural Naming Conventions.
Components are AdjectiveVerbs
Couplings are VerbNouns
Files should be organized by
- Data Models
- Passive Components
- Main Component
- User Interfaces