{"componentChunkName":"component---node-modules-gatsby-theme-medium-to-own-blog-src-templates-blog-post-js","path":"/qi4j-an-implementation-of-composite-oriented-programming/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://javame.netlify.app","githubUrl":"https://github.com/aterreno/blog"}},"mdx":{"fields":{"slug":"/qi4j-an-implementation-of-composite-oriented-programming/"},"excerpt":"Many thanks to  Dan  that pointed out on our internal ML to  Qi4J .  Quoting from the home page: Principles   -  Composite Oriented…","timeToRead":1,"frontmatter":{"title":"Qi4j: an implementation of Composite Oriented Programming","description":"","categories":[],"date":"February 24, 2008","canonical_link":"https://javame.netlify.app//qi4j-an-implementation-of-composite-oriented-programming-d09b3305b23c"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Qi4j: an implementation of Composite Oriented Programming\",\n  \"description\": \"\",\n  \"date\": \"2008-02-24T00:00:00.000Z\",\n  \"categories\": [],\n  \"published\": true,\n  \"canonical_link\": \"https://javame.netlify.app//qi4j-an-implementation-of-composite-oriented-programming-d09b3305b23c\",\n  \"redirect_from\": [\"/qi4j-an-implementation-of-composite-oriented-programming-d09b3305b23c\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Many thanks to \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://dannorth.net/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Dan\"), \" that pointed out on our internal ML to \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://www.qi4j.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Qi4J\"), \".\\xA0\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Quoting from the home page:\"), mdx(\"p\", null, \"Principles  \"), mdx(\"p\", null, \"-\", \" Composite Oriented Programming builds on some principles that are not addressed by Object Oriented Programming atBeruhmte \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://www.neucasino.de/jackpot-regeln.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"http://www.neucasino.de/jackpot-regeln.html\"), \". all.  \"), mdx(\"p\", null, \"-\", \" Behavior depends on Context  \"), mdx(\"p\", null, \"-\", \" Decoupling is a virtue  \"), mdx(\"p\", null, \"-\", \" Business Rules matters more.  \"), mdx(\"p\", null, \"-\", \" Classes are dead, long live interfaces.\"), mdx(\"p\", null, \"Are you alreadyRed \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://www.toques-excelente.com/milhares-de-toques-polifonicos-gratuitos-oferece.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"toques polifonicos gratuitos\"), \" gratis para nokia tons para celular Gratis. worried that they\\u2019re using xml to do this?\"), mdx(\"p\", null, \"Qi4j is trying to address the flaws of OOP and introduce Composite Oriented Programming to the world, without introducing new programming languages, or awkward constructs. Heck, we don\\u2019t even use any XML.\"), mdx(\"p\", null, \"Definitely interesting.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},"allWebMentionEntry":{"nodes":[]}},"pageContext":{"id":"e35e52d4-9c46-5873-8cb4-2fa45db11c66","previous":{"id":"c82cecaf-5cd3-54a3-ae3d-2404a4c84c84","fields":{"slug":"/bye-bye-london/","published":true},"frontmatter":{"redirect_from":["/bye-bye-london-3ca02b56c865"],"redirect_to":null,"title":"bye bye London"}},"next":{"id":"dfe7e07b-a084-5387-ab4b-5b9cfef44c66","fields":{"slug":"/spiking-with-spikes-what-is-a-spike/","published":true},"frontmatter":{"redirect_from":["/spiking-with-spikes-what-is-a-spike-83a783e09d89"],"redirect_to":null,"title":"Spiking with spikes: what is a spike?"}},"permalink":"https://javame.netlify.app/qi4j-an-implementation-of-composite-oriented-programming/","themeOptions":{"plugins":[],"config":{"title":"Antonio Terreno","description":"Antonio Terreno's blog archive","shortBio":"","bio":"Principal Consultant at Equal Experts","author":"Antonio Terreno","githubUrl":"https://github.com/aterreno/blog","siteUrl":"https://javame.netlify.app/","social":{"twitter":"javame","medium":"","facebook":"","github":"aterreno","linkedin":"antonioterreno","instagram":"tritonitri"},"goatCounterCode":null}}}},"staticQueryHashes":["4131332129","645483741"]}