organic software development concept and history
“Organic computing is a form of biologically-inspired computing with organic properties.”Wikipedia: Organic computing
“Organic computer systems consist of autonomous and cooperating subsystems, they function – as far as possible – self-organizing. Self-organization is based on adaptive and context-sensitive behavior. ”organic-computing.de
organic-computing.deOrganic Computer (OC) systems have so called self-x properties like:
- Self-configuration
- Self-optimization
- Self-protection
- Self-reflection
a simplified analogy with existing concepts
==
var DNA = {
"branch": {
"branch": {
"property": "value"
}
}
}
==
var ChemicalX = {
type: "ChemicalX",
xpower: 100,
target: Object
}
==
plasma.on("myEvent", function(c){
console.log(c.type) // ChemicalX
console.log(c.xpower) // 100
})
plasma.emit({type: "myNewEvent"})
plasma.emit("myEvent") // same as {type: "myEvent"}
plasma.emit(new Error("an error chemical with message"))
plasma.on(Error, function(err){
console.log(err) // "Error: an error chemical with message"
})
==
var Organelle = function(plasma, dna) {
this.doSomething = function(){}
}
var ctrl = new Organelle(plasma, dna)
ctrl.doSomething()
==
var Cell = function(){
this.start = function(){
var dna = new DNA()
var plasma = new Plasma()
var nucleus = new Nucleus(plasma, dna)
plasma.on("build", function(c, next){
nucleus.build(c, next)
})
dna.loadDir("dna", function(){
plasma.emit({type: "build", branch: "main"})
})
}
}
var app = new Cell()
app.start()
var dna = new DNA()
dna.loadDir("dna", function(){
foldAndMerge(dna, "branch-name")
transform(dna)
var value = dna.selectBranch("branch-name.object.property")
})
var plasma = new Plasma()
plasma.on("Chemical1", function(){})
plasma.once(["Chemical1", "2"], function(){})
plasma.emit({type: "Chemical1", data: {}})
var MyOrganelle = function(plasma, dna){
// ... plasma.on , dna.property, ...
}
var my_organele_instance = new MyOrganelle(plasma, dna)
var nucleus = new Nucleus(plasma, dna)
nucleus.build({
"branch": "root.based.dna.branch.name"
})
nucleus.buildOne({
"source": "path/to/organelle/module",
"organelle-dna": {}
})
var Cell = function(){
}
Cell.prototype.start = function(){
// load dna
// construct organelles
// ...
}
Cell.prototype.stop = function(){
// dispose and destroy organelles
}
var cell_instance = new Cell()
cell_instance.start()
Special thanks to Hakim El Hattab for the presentation framework