<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Radical Object-Orientation: A Step-by-Step Introduction]]></title><description><![CDATA[A series of articles developing Radical Object-Orientation from Alan Kay's original idea.]]></description><link>https://radicalobjectorientation.substack.com/s/introduction</link><image><url>https://substackcdn.com/image/fetch/$s_!r1xI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png</url><title>Radical Object-Orientation: A Step-by-Step Introduction</title><link>https://radicalobjectorientation.substack.com/s/introduction</link></image><generator>Substack</generator><lastBuildDate>Sun, 24 May 2026 19:23:19 GMT</lastBuildDate><atom:link href="https://radicalobjectorientation.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ralf Westphal]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[radicalobjectorientation@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[radicalobjectorientation@substack.com]]></itunes:email><itunes:name><![CDATA[Ralf Westphal]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ralf Westphal]]></itunes:author><googleplay:owner><![CDATA[radicalobjectorientation@substack.com]]></googleplay:owner><googleplay:email><![CDATA[radicalobjectorientation@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ralf Westphal]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Radical Object-Orientation #0F: The Basic Two Dimensions of Radical Object-Orientation]]></title><description><![CDATA[Tying it all together]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0f-the</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0f-the</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 29 Mar 2024 08:57:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>From objects in Alan Kay's original vision to actions and back to objects. How do we tie both together? To me, the answer lies in a 2-dimensional space. It's the beginning of what I call the <em>Software Universe</em>.</p><p>Here's what I mean: There is a strange, yet unknown, unnamed "stuff" that actually creates behavior in software.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LLl1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LLl1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 424w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 848w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 1272w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LLl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png" width="299" height="241.52987012987012" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1baa2263-865f-4441-9ef6-722ab2534299_770x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:770,&quot;resizeWidth&quot;:299,&quot;bytes&quot;:903850,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LLl1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 424w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 848w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 1272w, https://substackcdn.com/image/fetch/$s_!LLl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1baa2263-865f-4441-9ef6-722ab2534299_770x622.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We'll get to what that is in the reality of programming in a later article. For now, just assume there exists this "magic dust" that can be used to create behavior or actual functionality.</p><p>All software can be programmed by simply arranging this "stuff" in the right way. It's like building a sand castle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H2RQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H2RQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 424w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 848w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 1272w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H2RQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png" width="355" height="346.72494172494174" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:858,&quot;resizeWidth&quot;:355,&quot;bytes&quot;:1125763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H2RQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 424w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 848w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 1272w, https://substackcdn.com/image/fetch/$s_!H2RQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb181e0f-4a1e-4745-a0f1-346d6992c1de_858x838.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It consists solely of the "magic dust" brought into a useful shape.</p><p>But as you've probably experienced yourself: this is not built to last. It's fragile and even hard to erect in the first place.</p><p>That's why sand or clay is not used as is to build more durable structures; rather, it's formed into small units, into building blocks called bricks, from which buildings are then constructed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AqwR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AqwR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 424w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 848w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AqwR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png" width="433" height="452.0785440613027" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1090,&quot;width&quot;:1044,&quot;resizeWidth&quot;:433,&quot;bytes&quot;:1644666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AqwR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 424w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 848w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 1272w, https://substackcdn.com/image/fetch/$s_!AqwR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f7cc923-1e61-42e8-a23b-b85f0a9c4d2b_1044x1090.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let's map that to the world of programming. What are the building blocks there? You might think it's objects. Wasn't that the whole point when Alan Kay coined the term? Maybe &#8212; but as it turned out, objects themselves don't do anything. It's actions that are the workhorses!</p><p>Actions are the bricks of software development! They compose the "magic dust" into units of certain functionality (operations), and they compose actions into even larger units of particular functionality at a higher level of abstraction (integrations). Like bricks get stacked to form walls.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q6fN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q6fN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 424w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 848w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 1272w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q6fN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png" width="727" height="135.31387362637363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:271,&quot;width&quot;:1456,&quot;resizeWidth&quot;:727,&quot;bytes&quot;:162521,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q6fN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 424w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 848w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 1272w, https://substackcdn.com/image/fetch/$s_!Q6fN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0028e0ee-58d6-4f9a-9d8c-b6422d99ea42_1612x300.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>To depict such hierarchies of actions composed into data flows at growing levels of abstraction more flexibly, the nesting can be replaced with a tree:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o8OF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o8OF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 424w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 848w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o8OF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png" width="1456" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:550620,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o8OF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 424w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 848w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!o8OF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb07af68c-8f10-45d0-8481-3d51bd81b0c6_2054x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is the first dimension of the software universe. Larger units of functional units &#8212; actions &#8212; are built from smaller ones through composition. And it all is made from... sand. No, sorry, "magic dust" aka "behavior-creating stuff".</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Am8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Am8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 424w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 848w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 1272w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Am8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png" width="1344" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1344,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:549395,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Am8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 424w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 848w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 1272w, https://substackcdn.com/image/fetch/$s_!7Am8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbeb7bf-b4ae-4004-a485-88aea00e81b9_1344x906.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It's actions all the way down &#8212; until you hit sand &#8212; to satisfy the user with beautiful behavior.</p><p>Now, on to objects.</p><p>Objects don't compose; they aggregate. They tie together multiple such hierarchies of data flows under one roof. And they add state if needed. State and non-root actions are hidden within the boundaries of an object. Only root actions are accessible; they get triggered by messages an object receives.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;214334cb-375f-484e-ac2d-dc996985b38d&quot;,&quot;caption&quot;:&quot;Objects are linked by their input and output ports, forming their external structure or surface. But what about their internal makeup? It's essential because an object needs a mechanism to ensure that an input message on a specific port results in an output message on a particular other. The port&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #0C: The Internal Structure of an Object&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-15T09:50:59.377Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-0c-the&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142545039,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u2nC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u2nC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 424w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 848w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 1272w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u2nC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png" width="1456" height="945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:945,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:385138,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u2nC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 424w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 848w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 1272w, https://substackcdn.com/image/fetch/$s_!u2nC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ef106be-7715-4c23-a757-0a9cab67e906_2040x1324.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But objects also compose other objects into networks of collaborators. It's objects all the way down, too &#8212; until you hit just actions. This is where our journey into Alan Kay's vision started: objects needed to be connected. Who's responsible for that? Again, objects. At a higher level of abstraction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mPVH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mPVH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 424w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 848w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 1272w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mPVH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png" width="1456" height="944" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:944,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:299039,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mPVH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 424w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 848w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 1272w, https://substackcdn.com/image/fetch/$s_!mPVH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ac84a8-7f09-41df-8276-a63894f8a7d9_1650x1070.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Is this becoming a bit complicated? I hope not. Because I think it's a very straightforward, scalable meta-model of software. This model has two dimensions:</p><ul><li><p>Object dimension: Software is made up of a hierarchy of objects connected in uni-directional data flows. Messages are the data flowing between objects.</p></li></ul><p>You can describe a software system by just looking at these object networks at different strata of abstraction.</p><p>However, since objects are (usually) described by nouns, this is only good for a pretty big picture. And it leaves in the dark how objects are actually creating behavior. The leaves in this object hierarchy can be quite big without giving a hint as to how they are processing messages.</p><p>That's why we have to look more closely &#8212; and what we find is that objects are made of actions. Actions are message processors, and they are very different from objects. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f8069029-b0e8-43d8-95b2-006ecf528996&quot;,&quot;caption&quot;:&quot;When we take Alan Kay's concept of object-orientation to the next level with Radical Object-Orientation, we create a system where data flows in a structured hierarchy, with messages passing between objects. Inside each object, specific actions are tasked with processing these messages, as shown he&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #0D: Messages Flowing Between Actions&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-19T09:58:42.483Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-0d-messages&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142545304,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Hence the second dimension:</p><ul><li><p>Action dimension: Objects are made up of a hierarchy of actions connected in uni-directional data flows.</p></li></ul><p>Objects aggregate actions and state. Objects compose other objects into data flows. This is best depicted by making the object hierarchy orthogonal to the action hierarchy:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3qF8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3qF8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 424w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 848w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 1272w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3qF8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png" width="1230" height="1146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1146,&quot;width&quot;:1230,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:283587,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3qF8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 424w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 848w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 1272w, https://substackcdn.com/image/fetch/$s_!3qF8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c36477d-acb0-4619-8403-afb5b880dbab_1230x1146.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Both dimensions are based on the "magic dust", the "stuff" that's actually creating behavior. Both are hierarchies of data flows. But the purpose of the dimensions is different:</p><ul><li><p>The action dimension is solely about behavior. Actions are denoted by verbs. Verbs are about activity. This is where more and more specific behavior gets abstracted from the generic "magic dust".</p></li><li><p>The object dimension is about structure. Runtime structure. Here, actions and state get associated with each other. Objects are built on actions. "Bubbles" of closely related data flows are formed to isolate different parts of the totality of all data flows from each other at runtime. This is for runtime stability.</p></li></ul><p>You can start out with "magic dust" alone plus state. But that does not scale. It becomes unwieldy very quickly. Think machine code or Assembler.</p><p>You can then wrap up "magic dust" into actions. That scales better if organized nicely into a hierarchy of data flows. But ultimately, this becomes brittle due to inconsistent state management. Think BASIC, Fortran, or C.</p><p>Enter objects! They wrap up actions plus state, forming black boxes hiding details to lower the risk of state inconsistencies.</p><p>Actions are concerned with ever more abstract behavior. Objects are concerned with ever more abstract structures aka aggregation of behavior.</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #0E: What Objects Encapsulate]]></title><description><![CDATA[Data flows between actions all the way down]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0e-what</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0e-what</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 22 Mar 2024 09:32:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You might be pondering: If the essence of Radical Object-Orientation leads us to a point where data moves between actions, what role do objects play initially? Doesn't this approach circle back to a form of procedural programming?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_MMX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_MMX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 424w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 848w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 1272w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_MMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png" width="1456" height="314" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88381,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_MMX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 424w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 848w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 1272w, https://substackcdn.com/image/fetch/$s_!_MMX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fba2060-5d98-421f-bdd2-0126005fd685_1818x392.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Behavior emerges from the interaction of data flows between actions.</figcaption></figure></div><p>No, this doesn't equate to a return to procedural programming. Procedural programming focuses on control flow rather than data flow.</p><p>Moreover, objects serve a crucial role as encapsulating entities. They act as "black boxes" that hide intricacies. In other words, they isolate action groups from one another and reduce the interdependence between different segments of behavior creation.</p><p>In Radical Object-Orientation, software behavior is shaped by actions housed within objects.</p><p>When it comes to software design, prioritizing behavior is key, with structure coming in second. This underscores the significance of the aforementioned data flow between actions. Structure, or how actions are organized into larger entities like objects, is of secondary importance. From a customer's perspective, the structural intricacies are often irrelevant; investments in structure don't directly enhance the user experience.</p><p>Objects are fundamentally about structure, but what do they collect into this structure?</p><p>Objects gather actions that share commonalities, such as related themes, identical internal states, or the utilization of the same API for external states.</p><p>In essence, objects are aggregators of actions and the shared states among them, as well as the data flows within these actions.</p><p>Consider this <em>Storage </em>object, for example:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0TUO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0TUO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 424w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 848w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 1272w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0TUO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png" width="537" height="212.5287009063444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:1324,&quot;resizeWidth&quot;:537,&quot;bytes&quot;:153007,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0TUO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 424w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 848w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 1272w, https://substackcdn.com/image/fetch/$s_!0TUO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c589d74-721b-4ded-8416-8741fe995c46_1324x524.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Objects collect actions as their actual message processors</figcaption></figure></div><p>This object combines a specific action with the state it manipulates. The state could be a list of names, with new entries being added. This list might be stored in memory or within a file. Assuming the latter, the file's structure would alter as new names are appended. It could look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FrZy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FrZy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 424w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 848w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 1272w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FrZy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png" width="212" height="139.0899470899471" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:248,&quot;width&quot;:378,&quot;resizeWidth&quot;:212,&quot;bytes&quot;:27871,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!FrZy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 424w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 848w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 1272w, https://substackcdn.com/image/fetch/$s_!FrZy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F456cbde4-6a13-4a33-8da9-8df54391198c_378x248.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>or like this:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4wlU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4wlU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 424w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 848w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 1272w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4wlU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png" width="292" height="118.54700854700855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:190,&quot;width&quot;:468,&quot;resizeWidth&quot;:292,&quot;bytes&quot;:27330,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4wlU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 424w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 848w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 1272w, https://substackcdn.com/image/fetch/$s_!4wlU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa152dfe9-f8da-4fff-83f8-391820c9b67f_468x190.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The crucial question then becomes: What occurs within the <em>append name</em> action? Should this action remain opaque, or should it be dissected into smaller, more detailed sub-actions?</p><p>Radical Object-Orientation's elegance lies in its ability to refine actions in alignment with the principles derived for objects: the PoMO and the IOSP.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;61664a60-4868-4983-89f9-3cd9e5b0aefb&quot;,&quot;caption&quot;:&quot;Radical Object-Orientation means stateful (autonomous) objects communicate unidirectionally (asynchronously) through messages. At least that's the gist of Alan Kay's original idea, which he introduced back in 1966 or 1967 using a biological analogy.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #03: The Principle of Mutual Oblivion (PoMO)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-02-26T13:46:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-03-the&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142448764,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a303b65e-17ef-4e08-a41b-4741075e8240&quot;,&quot;caption&quot;:&quot;In Alan Kay's biological analogy, there's another premise worth uncovering. It's not just that \&quot;the big idea\&quot; implies objects communicate unidirectionally via messages like cells with neurotransmitters, thus being functionally independent. It also suggests the necessity for an explicit \&quot;intelligent design\&quot; to even connect cells for message communication.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #06: The Integration Operation Segregation Principle (IOSP) &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-01T18:35:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-06-intelligent&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142461830,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In this case that means, <em>append name</em> can be viewed as an integration. It&#8217;s an abstraction for a data flow between smaller, more focused actions:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fWb0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fWb0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 424w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 848w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 1272w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fWb0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png" width="1456" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84566,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fWb0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 424w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 848w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 1272w, https://substackcdn.com/image/fetch/$s_!fWb0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F742f868a-0782-4697-ab4e-651e2fa877f6_1878x516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Actions can be compositions of yet other actions following the IOSP</figcaption></figure></div><ul><li><p><em>append one</em> actually and only appends the incoming name to the list</p></li><li><p><em>retrieve all</em> actually and only loads the list of all names</p></li></ul><p>This might seem trivial to you and it is in this example. But I am trying to explain a principle here which can be applied at any scale:</p><blockquote><p>It&#8217;s data flows between actions all the way down inside of objects!</p></blockquote><p>Actions can consist of a hierarchy of data flows between ever &#8220;smaller&#8221;, more fine grained, more general actions. Action are the true compositions inside of objects! Actions compose more specialized data flows from more general actions, i.e. they are integrations. Or they compose actual behavior from what later will be called logic. That&#8217;s what operations are doing in an action hierarchy.</p><p>In the above image <em>append name</em> is an integration and <em>append one</em> as well as <em>retrieve all</em> are operations composed into a data flow inside of <em>append name</em>.</p><p>This could go on indefinitely: any action can become an integration, if you like. But that&#8217;s a detail the environment in which objects are tied into networks of cooperation is not interested in. It&#8217;s hidden inside the object. It&#8217;s encapsulated like the state. That&#8217;s why objects are important even if actions do all the work. They draw opaque boundaries between different parts of behavior generation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7qcm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7qcm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 424w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 848w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7qcm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png" width="1456" height="914" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:914,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239252,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!7qcm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 424w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 848w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!7qcm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ebe7bd-6627-4112-9a5e-2049aa944afb_1922x1206.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects encapsulate the details of how behavior is created. Inside they hide state (access) and composition of actions.</figcaption></figure></div><ul><li><p>Objects process messages by means of actions - but how exactly is hidden from the environment</p></li><li><p>Objects are aggregations of actions sharing something: purpose and/or state (access)</p></li><li><p>Objects hide the details of how state is structured and accessed</p></li><li><p>Objects hide the details about how actions are structured</p></li></ul><blockquote><p>Data flows between actions are about behavior. Objects are about structuring all actions and state into manageable, useful groups.</p></blockquote><p></p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #0D: Messages Flowing Between Actions]]></title><description><![CDATA[The "big idea" is still messaging]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0d-messages</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0d-messages</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Tue, 19 Mar 2024 09:58:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When we take Alan Kay's concept of object-orientation to the next level with Radical Object-Orientation, we create a system where data flows in a structured hierarchy, with messages passing between objects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S7AM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S7AM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 424w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 848w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 1272w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S7AM!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png" width="917" height="323.72115384615387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:514,&quot;width&quot;:1456,&quot;resizeWidth&quot;:917,&quot;bytes&quot;:139452,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S7AM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 424w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 848w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 1272w, https://substackcdn.com/image/fetch/$s_!S7AM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca9b9177-d0f8-4c7e-b955-dee972d8fc64_2210x780.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Alan Kay's original idea: messages flowing between objects</figcaption></figure></div><p>Inside each object, specific actions are tasked with processing these messages, as shown here:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4kQb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4kQb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 424w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 848w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 1272w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4kQb!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png" width="1015" height="349.2548076923077" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:501,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1015,&quot;bytes&quot;:175920,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4kQb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 424w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 848w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 1272w, https://substackcdn.com/image/fetch/$s_!4kQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59210481-4397-4e6f-834d-b006e6f59be7_2256x776.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects need to have structure: they are made up of responsibilities for processing messages aka actions.</figcaption></figure></div><p>Alan Kay's original analogy didn't delve into these details, but it's quite clear that for the various messages an object handles, there should be dedicated components within the object to do the actual work. While an object might appear as a simple "black box" from the outside, it must have an organized internal structure.</p><p>Now, think about this: Consider the second figure again. What really drives the functionality, or the behavior, that users experience? Is it the network of interconnected objects, or is it the actions within them?</p><p>I firmly believe it's the actions. They narrate the process:</p><ol><li><p>A name is first collected from the user.</p></li><li><p>This name is then added to an existing list of names.</p></li><li><p>The list is analyzed to generate a greeting message.</p></li><li><p>Finally, the greeting message is displayed to the user.</p></li></ol><p>When we remove the objects and focus solely on these actions...</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ChL8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ChL8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 424w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 848w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 1272w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ChL8!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png" width="1007" height="248.9835164835165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:360,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1007,&quot;bytes&quot;:152224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ChL8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 424w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 848w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 1272w, https://substackcdn.com/image/fetch/$s_!ChL8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb866a66b-598c-4cb9-a7c7-b2f070c57aa9_2300x568.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">If actions are processing messages, then it's actually actions which are connected by data flows</figcaption></figure></div><p>&#8230;the process becomes much simpler to understand and follow. This contrasts with the static nature of the first figure, which only shows objects without any indication of activity. Now, we see a story unfolding through actions.</p><p>It's quite intriguing that object-orientation, which originally focused on objects (nouns), has evolved to emphasize actions (verbs). This shift highlights that while objects provide a structural framework, actions bring the dynamic, behavior-driven aspect to the forefront, as shown here:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7SGm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7SGm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 424w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 848w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 1272w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7SGm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png" width="1456" height="314" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:314,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88381,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7SGm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 424w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 848w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 1272w, https://substackcdn.com/image/fetch/$s_!7SGm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e2de0af-bead-4505-b170-3c9215900c2e_1818x392.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">To understand how behavior is created in a software it's sufficient to focus on the actions of objects</figcaption></figure></div><p>Therefore, I suggest that Radical Object-Orientation should prioritize actions, as they are the ones managing the messages. After all, the essence of Kay's vision was the concept of messaging.</p><p>Even when we momentarily set aside the objects, the impact of this approach is evident. It introduces a clear, unidirectional flow of data between actions, maintaining the Principle of Mutual Oblivion (PoMO). Moreover, the Integration Operation Segregation Principle (IOSP) remains applicable, marking a significant evolution from traditional coding practices to what was envisaged with Kay's revolutionary idea.</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #0C: The Internal Structure of an Object]]></title><description><![CDATA[Actions as the creators of behavior]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0c-the</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0c-the</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 15 Mar 2024 09:50:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Objects are linked by their input and output ports, forming their external structure or surface.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pzqo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pzqo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 424w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 848w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pzqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png" width="409" height="332.86580086580085" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1128,&quot;width&quot;:1386,&quot;resizeWidth&quot;:409,&quot;bytes&quot;:222143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pzqo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 424w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 848w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!pzqo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a9d65e-67b5-4e98-94ad-029bd062506f_1386x1128.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Integration connects objects by their ports into data flows</figcaption></figure></div><p>But what about their internal makeup? It's essential because an object needs a mechanism to ensure that an input message on a specific port results in an output message on a particular other. The ports for receiving and sending messages must be interconnected somehow, or else it's unclear whether an input will lead to the expected output. &#129488;&#129335;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3g8I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3g8I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 424w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 848w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 1272w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3g8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png" width="585" height="357.75351014040564" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1282,&quot;resizeWidth&quot;:585,&quot;bytes&quot;:128718,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3g8I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 424w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 848w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 1272w, https://substackcdn.com/image/fetch/$s_!3g8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F576ce85a-bf43-4c09-81d2-dc316ed10538_1282x784.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Which input port will lead to messages released on which output port?</figcaption></figure></div><p>I suggest that the inner structure consists of various activities. While an object is generally seen as a "thing" represented by a noun, its components are actions, represented by verbs. All actions are of course transformations of some kind.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZMkM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZMkM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 424w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 848w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZMkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png" width="463" height="372.3234421364985" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1084,&quot;width&quot;:1348,&quot;resizeWidth&quot;:463,&quot;bytes&quot;:372911,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZMkM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 424w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 848w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 1272w, https://substackcdn.com/image/fetch/$s_!ZMkM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21393008-33ad-44bd-b535-5c6b69032df1_1348x1084.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects are made up of actions triggered by messages received on a input port and producing messages to be released through an output port</figcaption></figure></div><p>By labeling input ports with the actions they're linked to, it becomes simpler for integrations to direct messages appropriately.</p><p>And what about the output ports? Given that actions are expected to produce results (output messages), naming the output ports after the connected actions or the results they emit makes sense. This is straightforward when there's just one action involved, but multiple actions may require names based on the type of messages or results they release.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qvds!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qvds!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 424w, https://substackcdn.com/image/fetch/$s_!qvds!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 848w, https://substackcdn.com/image/fetch/$s_!qvds!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 1272w, https://substackcdn.com/image/fetch/$s_!qvds!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qvds!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png" width="467" height="315.1116504854369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:834,&quot;width&quot;:1236,&quot;resizeWidth&quot;:467,&quot;bytes&quot;:224141,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qvds!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 424w, https://substackcdn.com/image/fetch/$s_!qvds!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 848w, https://substackcdn.com/image/fetch/$s_!qvds!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 1272w, https://substackcdn.com/image/fetch/$s_!qvds!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdae1a535-8a46-41e1-a2c6-3c5283112f8a_1236x834.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Output ports can be named to reflect events happening inside an object</figcaption></figure></div><p>When an object performs an activity, it triggers a sequence of events internally. The output ports communicate these events to the outside world, indicating the completion of an activity or the production of a specific message.</p><p>Despite objects being autonomous according to the Principle of Mutual Oblivion (PoMO), their messages and ports evolve or are designed in tandem. Objects aim to be collaborative, not self-centered, and thus their interface is also shaped by the collective needs of other objects around them. Finding a balance between meeting others' needs and maintaining one's "authenticity" is key.</p><p>Objects form the building blocks of software in both mainstream and Radical Object-Orientation. However, Radical Object-Orientation further posits that these object compositions are essentially data flows at varying levels of abstraction.</p><p>And now Radical Object-Orientation introduces the idea that:</p><blockquote><p>Objects are constituted by actions that connect input and output ports, potentially sharing state.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nzAY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nzAY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 424w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 848w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 1272w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nzAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png" width="1284" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nzAY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 424w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 848w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 1272w, https://substackcdn.com/image/fetch/$s_!nzAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4912c3ae-4735-4aec-b366-1a2023a8698e_1284x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects bind together actions and state</figcaption></figure></div><p>Unlike integrations, this structural approach to objects isn't about composition! The actions within an object don't combine to form larger actions; they're merely grouped together based on similarity. While composition integrates dissimilar elements into a cohesive whole by focusing on the connections, aggregation groups similar elements by simply collecting them.</p><p>The actions under an object's umbrella share commonalities, such as purpose or resource use, making it logical to aggregate them. In contrast, the objects within an integration share less, highlighting their value for cooperation in data flow processes (division of labor).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vMJE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vMJE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 424w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 848w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 1272w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vMJE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png" width="1356" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1356,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:227423,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vMJE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 424w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 848w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 1272w, https://substackcdn.com/image/fetch/$s_!vMJE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7aeacea-3ede-48b4-9b11-052e31c64b2c_1356x918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Two types of abstraction</figcaption></figure></div><p>This leads us to a pivotal question: Radical Object-Orientation began with a focus on "things," denoted by nouns, and has evolved to emphasize actions, denoted by verbs, where the real behavior of code is created. So, why the initial focus on objects? Perhaps Radical Object-Orientation might be more aptly termed action-orientation? &#128563;&#128565;</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #0B: Structuring the Object Surface]]></title><description><![CDATA[Where are messages received and released?]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0b-structuring</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0b-structuring</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Wed, 13 Mar 2024 09:51:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We should once again closely examine Alan Kay's concept of object-orientation. The question now is: What is happening where messages are flowing? He named the sources and destinations of these messages "objects," implying that the communicators in this scenario are "things." This is reflected in his biological analogy, where entities like nerve cells and muscle cells are considered "things," and we use nouns to name them.</p><p>This might seem trivial to you because, after all, what else could objects be if not "things," and what else could we use but nouns to describe the entities that produce and consume messages? Wasn't this the core idea behind Alan Kay's vision: to make code and the process of thinking about code more tangible by establishing a correlation with the real world?</p><p>However, you will soon see that there is an alternative to this perspective. But first, let's fully grasp what it means for "things" to be represented by nouns, particularly in the context of traditional object-orientation.</p><p>Consider the following simple data flow between objects, which you should find relatable. The objects are identified by nouns, as is customary in mainstream object-orientation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X5IX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X5IX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 424w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 848w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 1272w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X5IX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png" width="1418" height="792" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:792,&quot;width&quot;:1418,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X5IX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 424w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 848w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 1272w, https://substackcdn.com/image/fetch/$s_!X5IX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22594d78-9b76-487d-8635-5175dde3a14d_1418x792.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects dented by nouns connected in a unidirectional message flow</figcaption></figure></div><p>Imagine how messages might flow between these objects:</p><ol><li><p>The UI object sends a message to the Storage object requesting data retrieval.</p></li><li><p>The Storage object then forwards the data to the Calculator object.</p></li><li><p>The Calculator object processes the data and sends its results to the Transformer object.</p></li><li><p>The Transformer object completes its task and sends the processed data back to the Storage object for storage.</p></li></ol><p>The process initiated by the user through the UI object is successfully completed. Achievement unlocked!&#129395;</p><p>This scenario seems to align with what Alan Kay envisioned, with nouns actively passing messages among themselves. It resembles how biological cells communicate with each other using neurotransmitters.</p><p>Yet, I respectfully disagree with this interpretation.</p><p>First, the aforementioned description violates the Principle of Mutual Oblivion (PoMO) in Radical Object-Orientation:</p><ul><li><p>"The UI object sends a message to the Storage object"? This cannot be the case because no object should know any other. It's the role of the integration to connect them into a cohesive message flow. Only the integration knows that the UI and Storage objects should work together.</p></li><li><p>"The Transformer object [&#8230;] passes its result on to the Storage object"? This reflects the same misunderstanding. The Transformer object does not know about the Storage object. Their connection is facilitated by the integration.</p></li></ul><p>This also raises questions about the nature of the messages. We've comfortably glossed over them so far, simply stating that "messages are flowing between objects." But what do these messages contain? Are they merely binary signals, akin to pressing a button, where the only variation is the presence or absence of a message? This is how neurotransmitters function, with variations only in quantity and frequency.</p><p>Or do messages convey specific data, such as a value for processing, as implied in the communication from the Storage to the Calculator object?</p><p>Perhaps messages also include a request, such as "Average this data" or "Remove duplicates from this data"?</p><p>Since objects are "things," as illustrated, it's reasonable to assume that Kay imagined them capable of processing various messages. For instance, the Storage object could load and store data, while the Calculator object could perform operations like averaging and summing data.</p><p>However, this would necessitate messages that carry not just data but also a discriminator to clarify the intended operation. For example, what action should the Calculator object take with the data "(1,2,3)"? Should it calculate the average or the sum?</p><p>Incorporating a discriminator within the message, such as "Average(1,2,3)" versus "Sum(1,2,3)," would clearly indicate to the recipient object the desired processing of the message's data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hrAf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hrAf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 424w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 848w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hrAf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png" width="547" height="438.0508241758242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1166,&quot;width&quot;:1456,&quot;resizeWidth&quot;:547,&quot;bytes&quot;:331520,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hrAf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 424w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 848w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!hrAf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1d72c7-41fa-455f-b11c-1f9d75c1d644_1506x1206.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Messages tagged with a request. Still a violation of the PoMO.</figcaption></figure></div><p>This adjustment appears to be an improvement. It would also accommodate what is known in conventional object-orientation as polymorphism, where objects of different types can process the same message, making them functionally interchangeable. The object emitting a message need not worry about the specific nature of the recipient, as long as the latter understands the message.</p><p>In Radical Object-Orientation terminology, this shifts the responsibility to the integration: It must ensure that objects are connected in such a way that each one receives only the messages it is equipped to handle.</p><p>Now, a UI object no longer needs to be familiar with Calculator or Storage objects. The integration simply routes a "Sum(...)" or "Load()" message from the sender to the appropriate receiver.</p><p>Upon closer inspection, however, this approach does not resolve the PoMO violation. Why should the UI object have any knowledge about summing data, or why should the Storage object know about averaging data? Both are generating messages with specific requests, suggesting a predetermined sequence of actions, thereby linking the sender to certain types of receivers. This is not reflective of natural processes, where, for example, the neurotransmitter Acetylcholine can be received by either nerve cells or muscle cells, with the emitting nerve cell remaining oblivious to the type of receiving cell.</p><p>Radical Object-Orientation suggests that message-producing objects should not be "contaminated" with knowledge about their environment. They only know how to handle specific messages and the state they are responsible for. What happens upstream or downstream from them is of no concern. This approach significantly enhances the potential for reusing objects.</p><p>While message data can be tagged, they should not include a request. Then, how can we trigger a specific behavior in an object? It's a noun, a "thing" capable of many actions. How can a Calculator object know whether it's supposed to average the data rather than sum it?</p><p>One possibility is to have different connection points for different types of messages. Just as biological cells have various receptors for different neurotransmitter molecules, objects could have message receptors too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ayTX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ayTX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 424w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 848w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ayTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png" width="567" height="460.2980769230769" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1182,&quot;width&quot;:1456,&quot;resizeWidth&quot;:567,&quot;bytes&quot;:329038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ayTX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 424w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 848w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 1272w, https://substackcdn.com/image/fetch/$s_!ayTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d59f04d-bc45-4983-b656-3a605212910c_1498x1216.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Messages delivered to a specific "receptor" on each object.</figcaption></figure></div><p>As we can see, a discriminator is no longer necessary. The integration ensures that data-only messages are routed to the correct receptor of the receiving object. The producing object is thus decoupled from any specific receivers.</p><p>Unfortunately, this does not solve all issues related to message flow. Secondly, an "object network" based on "things" quickly leads to ambiguity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cJgX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cJgX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 424w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 848w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 1272w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cJgX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png" width="581" height="488.82211538461536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1225,&quot;width&quot;:1456,&quot;resizeWidth&quot;:581,&quot;bytes&quot;:341626,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cJgX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 424w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 848w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 1272w, https://substackcdn.com/image/fetch/$s_!cJgX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc5c658a-e319-475b-8504-bd68f397df68_1476x1242.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ambiguity in routing output messages make message flows hard to understand.</figcaption></figure></div><p>To which receiver should a Calculator object's result be sent? Should it be transformed or stored directly? Should a sum be stored or transformed, should an average be stored or transformed?</p><p>Could tagging messages help? Perhaps. But why not employ the same approach as with receiving messages: add a "chimney" to a producing object. From there, messages produced are "excreted" into the environment. Integrations can then route them to a matching receptor on another object:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QlLM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QlLM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 424w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 848w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QlLM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png" width="555" height="507.35233516483515" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1331,&quot;width&quot;:1456,&quot;resizeWidth&quot;:555,&quot;bytes&quot;:319866,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QlLM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 424w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 848w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!QlLM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41446b03-1038-4939-be26-d03f551cbc2b_1472x1346.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">"Chimneys" resolve the routing ambiguity - but create problems of their own, as we'll see later.</figcaption></figure></div><p>Problem solved! No more ambiguity! The message from one "chimney" is directed to the Transformer object, and the message from the other to the Storage object.</p><p>Or to be more precise: The problem is almost solved. The remaining question is: When does the producing object "send" a message through which "chimney"? But that's a discussion for another time.</p><p>Let me summarize our findings this way: Objects need specific "receptors" and "chimneys" to receive and release messages. Without these, it's challenging to connect them in a deterministic, unambiguous manner.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R_gd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R_gd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 424w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 848w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 1272w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R_gd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png" width="629" height="364.18063186813185" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:1456,&quot;resizeWidth&quot;:629,&quot;bytes&quot;:186319,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R_gd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 424w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 848w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 1272w, https://substackcdn.com/image/fetch/$s_!R_gd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82d1f3fa-d072-4494-9b04-9f40cc0a7f58_1516x878.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Formalizing the structure the surface of objects.</figcaption></figure></div><p>As a technical term, I propose "port" for both "receptors" and "chimneys":</p><ul><li><p>Input ports receive messages from other objects.</p></li><li><p>Output ports release messages produced by an object into the environment.</p></li></ul><p>Integration orchestrates message flows by connecting objects through their ports.</p><p>This outcome aligns neatly with Alan Kay's original vision, I believe. Objects are "things" denoted by nouns, offering much to their environment. To "trigger" a specific behavior, "the right button" must be pressed. That button is a port tuned to certain messages. And objects release different messages at different points, making it easy to integrate them into various downstream flows.</p><p>Does this sound reasonable?</p><p>Well, it introduces a level of differentiation that was absent from Alan Kay's biological analogy. However, it still might not be the best starting point for implementing Radical Object-Orientation.</p><p>We need to delve deeper...</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #0A: Objects are Compositions]]></title><description><![CDATA[Building a Whole from Complementary Parts]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-0a-objects</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-0a-objects</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Mon, 11 Mar 2024 10:03:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XaZB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We began with an intuitive understanding of objects as entities engaged in activities, akin to biological cells, where "activity" refers to the processing of messages and potential changes in state, either internally or externally. We presumed these objects were inherently present and interconnected in a meaningful manner, despite not being directly aware of each other. This concept is known as "mutual oblivion" in Radical Object-Orientation.</p><p>However, it became clear that linking these objects could not be left to random processes, such as evolution, but required deliberate design. This responsibility is recognized as integration within Radical Object-Orientation.</p><p>Further exploration revealed that integrations themselves resemble objects: they, too, transform messages. This suggests that objects can be embedded within other objects, creating a nested structure. This notion is intriguing and practical, yet somewhat strange. Biological cells cannot be nested within each other, can they. Alan Kay&#8217;s idea has to be expanded.</p><p>Therefore, I propose the introduction of a new term: composition. While I have previously used this term, it was not in a systematic manner. Nevertheless, I believe it aptly describes the concept of integrations and operations within this context.</p><p>What is a composition?</p><blockquote><p>A composition amalgamates complementary functional units to forge a new, higher-level functionality.</p></blockquote><p>In Alan Kay's original vision, where objects were likened to biological cells, composition occurred in two forms:</p><ol><li><p>Objects exist as distinct entities, such as a nerve cell or a muscle cell, each being a composition of unseen elements that together form a functional unit for message processing.</p></li><li><p>Objects are combined into a larger entity, for example a neuromuscular synapse consisting of a nerve cell and a muscle cell; the neuromuscular synapse is a more complex functional unit; it&#8217;s on a higher level of abstraction than its constituents.</p></li></ol><p>Regrettably, the focus of Alan Kay was solely on individual objects, with the collective whole being overlooked and unnamed. This oversight was addressed by the IOSP, which recognized the assembly of objects into a data flow as an integration.</p><p>However, integrations can be deeply nested. At the foundational level, they incorporate objects, but at higher levels, they combine not just objects but other integrations. From an external viewpoint, these integrations are indistinguishable from the initial objects, leading to the suggestion of a unifying term: composition.</p><p>And this leads to the concept of "compositions all the way down," with compositions forming from other compositions. The terminal elements of this compositional hierarchy are termed operations, while the connecting nodes are integrations.</p><p>For integrations, it's clear they consist of other integrations and operations.</p><p>But what constitutes operations or the original objects?</p><p>They are composed of "stuff" responsible for state changes and transformations, possessing an atomic nature unlike the structured biological cells. This "stuff" lacks a relevant structure for our purposes. While we cannot alter this fundamental "stuff," we can design and construct objects aka operations from it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XaZB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XaZB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 424w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 848w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XaZB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png" width="1456" height="915" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:915,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196268,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XaZB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 424w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 848w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!XaZB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee25a5b7-cab7-4dcf-8f84-a3d43e8b7926_1662x1044.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It's compositions all the way down in Radical Object-Orientation</figcaption></figure></div><p>The specifics of this "stuff" within a composition tree's operations will be discussed later. It's quite straightforward in programming terms.</p><p>For now, it suffices to say:</p><ul><li><p>Radical Object-Oriented programming forms a deep, compositional hierarchy.</p></li><li><p>Intermediate nodes, termed integrations, assemble either other integrations or operations into a data flow.</p></li><li><p>Terminal nodes, known as operations, combine "stuff" into a control flow.</p></li></ul><p>To reiterate: The elements combined, whether into data or control flows, are complementary and distinct, like puzzle pieces. This is what elevates the whole above the sum of its parts, creating something novel not inherent in the individual components but emerging from creative problem-solving and design. You play the role of the intelligent designer.</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #09: Dependencies as a Matter of Abstraction]]></title><description><![CDATA[These are the "good guys"]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-09-dependencies</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-09-dependencies</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 08 Mar 2024 18:56:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mXjT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Radical Object-Orientation clears away functional dependencies, making testing and understanding a whole lot easier.</p><p>But dependencies still exist; they're just not functional. It's not about one object's logic depending on another's.</p><p>Integrations depend on the functional units they combine, whether those are operations aka objects or other integrations. But integrations don't do anything on their own. Their job is simple: they just connect functional units into data flows.</p><p>Within such a data flow, a functional unit must be present and do its job. The entire data flow depends on it. But this isn't the same as a dependency between objects, which can have very complex tasks.</p><ul><li><p>Data flows are much easier to grasp. You don't need to dive deep into the hierarchy; you read them from left to right. They describe their function fully at a glance, on a single level of abstraction.</p></li><li><p>Data flows hardly need testing. Well, almost. They're so straightforward. Integrating functional units is a breeze. Okay, that might be stretching it, but that's the gist. Data flows require far fewer tests because there are fewer paths within them. And if the integrated functional units are correct, then the integration will work too. You might want to verify this with so-called integration tests now and then; you'll want to feel how the integrated functional units work together. But that's nothing compared to the effort required to test operations.</p></li></ul><p>So, the dependencies of integrations on integrated functional units are relatively harmless. No need to fear them. On the contrary: They are essential for abstractions. The abstract always builds on the detail; the whole always depends on its parts.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mXjT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mXjT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 424w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 848w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mXjT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png" width="1452" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1452,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mXjT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 424w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 848w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!mXjT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eb80b89-c6c8-4d75-aa69-c41adcda0409_1452x1000.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Dependencies between functional units are inevitable. But they should only be created for integration purposes, i.e. for abstraction.</figcaption></figure></div><p>In Radical Object-Orientation, there's a rule:</p><blockquote><p>Dependencies between functional units only run from higher to lower abstraction.</p></blockquote><p>Dependencies point down the abstraction gradient. That&#8217;s what the <em>Dependency Inversion Principle (DIP)</em> was about all along. But why limit abstractions to interfaces as it&#8217;s mostly the case in DIP examples? Integrations are abstractions as well.</p><p>This gives you a great test: Whenever you see a dependency in your code, ask yourself whether the dependent is at a higher level of abstraction than the independent.</p><p>If yes, then the dependency is fine. If not, then your structure doesn't yet follow the IOSP of Radical Object-Orientation and does not implement a stratified design.</p><p>Take, for example, the dependencies in the "layered architecture" pattern. Here, the presentation layer depends on the business logic layer, which depends on the data access layer.</p><p>But is the presentation layer more abstract than the business logic layer, and the latter more abstract than the data access layer? No. They all operate at the same level of abstraction. They all do something completely different; their tasks are complementary.</p><p>When following the IOSP, essentially the same thing happens in every stratum, just at a different level of abstraction.</p><p>This means, in the layered model, the dependencies are functional. The layered model doesn't align with radical object orientation. That's why code in a layered software architecture is so hard to test. That's why there's so much talk about Inversion of Control (IoC), interfaces, and test surrogates.</p><p>The layered model doesn't handle dependencies well.</p><p>Dependencies aren't "evil"; you can't avoid them. They're like friction in mechanics: no machine works without friction. But you have to handle them carefully. For dependencies, this means: avoid functional dependencies, seek non-functional dependencies along the hierarchy of abstraction.</p><p>And now we're at a point where you should finally ask: What's actually being connected in these data flows and integrations? For Alan Kay, it's objects. But unfortunately, this concept doesn't scale very well.</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #08: Stratified Design]]></title><description><![CDATA[Build software from a hierarchy of languages]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-08-stratified</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-08-stratified</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Wed, 06 Mar 2024 18:49:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-BLG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You can also think of an integration hierarchy as a hierarchy of languages. Abelson and Sussman described it this way in their paper <a href="https://dspace.mit.edu/bitstream/handle/1721.1/6064/AIM-986.pdf">"Lisp: A language for stratified design"</a>: Complex systems are seen as being built from layers (strata) of specialized languages for different levels of detail.</p><p>Here, language doesn't strictly refer to different programming languages, but rather a set of primitives and rules for their combination, used to express and manipulate ideas at a certain level of abstraction. Each level uses the constructs of the level below it as its primitives, creating a layered architecture where higher levels abstract the complexity of the lower levels. For example, in electrical engineering, resistors and transistors (primitives at a lower level) are combined to create TTL circuits (a higher-level language), which are then used to build even higher structures like processors and memory systems. This approach allows for the modular construction of complex systems, where changes at one level can be made relatively independently of others.</p><p>Radical Object-Orientation aims to do the same for your software's code.</p><p>Alan Kay's objects are the primitives in the lowest stratum of a stratified design. They are the constructs of the most general language of an abstraction hierarchy. They're considered general because they can be reused in vastly different contexts, possibly even in other programs.</p><p>Objects as operations in a IOSP hierarchy are the ones that actually do something actively (similar to resistors and transistors). They generate behavior through the integration of logic. (More on this in a later post.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-BLG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-BLG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 424w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 848w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 1272w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-BLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png" width="1456" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-BLG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 424w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 848w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 1272w, https://substackcdn.com/image/fetch/$s_!-BLG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F242ac7e5-f5a3-4903-bd89-cdf7f47d3004_2232x1127.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In a stratified design every stratum represents the whole system albeit on a different level of abstraction.</figcaption></figure></div><p>In the context of IOSP, integrations no longer act on their own. They first integrate objects aka operations (similar to TTL circuits). Thus, they define constructs of a slightly more specialized, more abstract language above the primitives. In the next stratum above, integrations are composed of other integrations, but may also add more operations. And on the next level this repeats. They now form a much more specialized, more abstract language (similar to processors or memory).</p><p>This might sound familiar from software development: For example, when you code in C#, you're using a high-level language; it offers powerful abstractions, like foreach() or switch() with pattern matching. Beneath that is a less abstract language, the Intermediate Language (IL). Beneath that is an even less abstract language: Assembler. And at the bottom is the least abstract language, machine code.</p><p>I think you're glad you can express your solutions in C# or a similar high-level language rather than in machine code. By doing so, you stand at the top of a hierarchy of languages. That's why you're much more productive than developers from the 1960s.</p><p>Radical Object-Orientation seeks to achieve the same gains in productivity and comprehensibility for your code. That's the essence of IOSP. Eliminating functional dependencies makes it possible. However, this doesn't mean there are no dependencies left. But they are different and follow a clear rule.</p><p></p><p>P.S. Notice how Radical Object-Orientation isn't far from Functional Programming. Abelson and Sussman described stratified design with LISP; but it's equally possible with C#, Java, or Python. (Future articles will revolve around translating these concepts.)</p><div><hr></div><p>For another view on stratified design check out this older article:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:47084927,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/stratified-design-over-layered-design-125727c7e15&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;Stratified Design over Layered Design&quot;,&quot;truncated_body_text&quot;:&quot;Designing software with layers is common &#8212; and broken. It&#8217;s broken for two reasons: Layers suggest some form of abstraction; but layering very fundamentally is not about abstraction. Layering relies on functional dependencies which are hard to test and make software difficult to understand and evolve.&quot;,&quot;date&quot;:&quot;2017-06-04T18:24:24.900Z&quot;,&quot;like_count&quot;:1,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/stratified-design-over-layered-design-125727c7e15?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Stratified Design over Layered Design</div></div><div class="embedded-post-body">Designing software with layers is common &#8212; and broken. It&#8217;s broken for two reasons: Layers suggest some form of abstraction; but layering very fundamentally is not about abstraction. Layering relies on functional dependencies which are hard to test and make software difficult to understand and evolve&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">9 years ago &#183; 1 like &#183; Ralf Westphal</div></a></div>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #07: Nesting Integrations]]></title><description><![CDATA[Objects are operating in a hierarchy of data flows]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-07-nesting</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-07-nesting</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Mon, 04 Mar 2024 18:46:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a93cd6eb-3174-4234-894e-ed6722136526_2714x470.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Integration is what connects objects together into a new whole. Through integration, objects become partners in cooperation - even if they are unaware of each other (PoMO). Integration maintains their independence. Integration is quite different from the activity of objects and must be fundamentally separated from it (IOSP).</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0b433681-1165-42db-b4f5-bf0e6e9fa06e&quot;,&quot;caption&quot;:&quot;Radical Object-Orientation means stateful (autonomous) objects communicate unidirectionally (asynchronously) through messages. At least that's the gist of Alan Kay's original idea, which he introduced back in 1966 or 1967 using a biological analogy.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #03: The Principle of Mutual Oblivion (PoMO)&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-02-26T13:46:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-03-the&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142448764,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;bde0fbf3-f0f7-4f70-8c19-a53eb4d1559b&quot;,&quot;caption&quot;:&quot;In Alan Kay's biological analogy, there's another premise worth uncovering. It's not just that \&quot;the big idea\&quot; implies objects communicate unidirectionally via messages like cells with neurotransmitters, thus being functionally independent. It also suggests the necessity for an explicit \&quot;intelligent design\&quot; to even connect cells for message communication.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Radical Object-Orientation #06: The Integration Operation Segregation Principle (IOSP) &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-01T18:35:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://radicalobjectorientation.substack.com/p/radical-object-orientation-06-intelligent&quot;,&quot;section_name&quot;:&quot;A Step-by-Step Introduction&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:142461830,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Radical Object-Orientation&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>These are the core principles of Alan Kay's idea of object orientation for me, aka Radical Object-Orientation.</p><p>Objects communicate with unidirectional messages for a purpose that is larger, more comprehensive. They are parts of a whole. The whole is established and represented by integration.</p><p>But here's the kicker: From the outside, integration itself is indistinguishable from an object.</p><p>An object processes incoming messages into outgoing messages by leveraging its internal state.</p><p>Connected objects also process incoming messages into outgoing ones. They do this in a data flow, which you can think of as a production line. A message triggers a cascade of messages within the data flow at the first object, leading to messages at its end.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HneX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HneX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 424w, https://substackcdn.com/image/fetch/$s_!HneX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 848w, https://substackcdn.com/image/fetch/$s_!HneX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 1272w, https://substackcdn.com/image/fetch/$s_!HneX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HneX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png" width="1456" height="252" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:252,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HneX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 424w, https://substackcdn.com/image/fetch/$s_!HneX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 848w, https://substackcdn.com/image/fetch/$s_!HneX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 1272w, https://substackcdn.com/image/fetch/$s_!HneX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75187bf9-41cc-48a1-b266-7640e785e87f_2232x387.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">Integrations can be arbitrarily nested. On each level they integrate either other integrations or basic objects aka operations</figcaption></figure></div><p>This means that the integration of objects behaves as a black box just like the individual objects it integrates. Integrations and their operations are in a whole-part relationship. Yet, it's evident that integrations are also parts of an even larger whole. Integrations can be integrated along with operations and other integrations. It&#8217;s a hierarchy of integrations with objects at the bottom.</p><p>The Integration Operation Segregation Principle (IOSP) allows for arbitrarily deep nesting downwards or abstraction upwards.</p><p>With each integration, complementary functional units - integrations or operations - are connected into a new whole within a data flow. The higher you go in such a hierarchy, the easier it becomes to initiate behavior with a message. And the higher you go, the more specialized and specific the integrations become.</p><p>An integration hierarchy reflects what constitutes our prosperity: a hierarchy of technological abstractions. Today, you get into a car and simply press a button to start it. Compare this convenience to the effort required to start a motor-driven vehicle 120 years ago. Or take your smartphone and make a call. Compare that with the effort needed to make a call 100 years ago.</p><p>You are surrounded by hierarchies of integration. You live at the peak of a deep hierarchy of abstractions.</p><p>This idea is not new, however. It was already described as a hierarchy of languages in the 1980s.</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #06: The Integration Operation Segregation Principle (IOSP) ]]></title><description><![CDATA[In Need of Intelligent Design for Data Flows Between Objects]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-06-intelligent</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-06-intelligent</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 01 Mar 2024 18:35:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mzyS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In Alan Kay's biological analogy, there's another premise worth uncovering. It's not just that "the big idea" implies objects communicate unidirectionally via messages like cells with neurotransmitters, thus being functionally independent.</p><p>It also suggests the necessity for an explicit "intelligent design" to even connect cells for message communication.</p><p>How do biological cells with their neurotransmitters enact change? When a nerve cell produces Acetylcholine, it's oblivious to muscle cells that might respond.</p><p>A reaction to released neurotransmitters is only feasible if receptive cells are nearby. The spatial arrangement of cells is crucial for effectiveness. And how does this arrangement come about? Evolution led to "blueprints," along which development under environmental influence occurs. The result is a viable whole, an organism with its countless, neatly "packed" cells.</p><p>Evolution has thus led to the development of different cell types, neurotransmitters, and arrangements.</p><p>In software development, such evolution is unfortunately only possible in very limited domains and is called genetic programming. For the requirements your business world software needs to meet, you can't just call upon evolution. You're left with intelligent design, essentially playing God.</p><p>For your object orientation, this means making deliberate choices:</p><p>You must decide which objects should exist.</p><p>You must decide which messages should exist.</p><p>You must decide how objects should be connected to allow certain messages to flow.</p><p>The result is an integration: It's a new whole where individual objects are purposefully interconnected. From the various functionalities of the constituting objects, a comprehensive functionality at a higher level emerges.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mzyS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mzyS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 424w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 848w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 1272w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mzyS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png" width="1456" height="715" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mzyS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 424w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 848w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 1272w, https://substackcdn.com/image/fetch/$s_!mzyS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53827f65-e4e4-4de4-8ac3-ddcbf87fffc9_1820x894.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An integration composing two objects as its operations into a new whole</figcaption></figure></div><p>An integration combines complementary functionalities into something new.</p><p>In Alan Kay's biological analogy, cells are highlighted as the main actors. But ultimately, it's about something larger, achieved only through the cooperation of all cells.</p><p>Unfortunately, Alan Kay forgot to mention the tissue, that organism form from cells, missing out on the necessity of integration.</p><p>Objects operate on messages. Hence, I call them operations.</p><p>Objects are combined into a new whole. This I call integration.</p><p>Integration is a distinct achievement. It's categorically different from operation. Therefore, for Radical Object-Orientation, I propose a second principle:</p><p><strong>Integration Operation Segregation Principle (IOSP)</strong></p><p>If you want to write radically object-oriented code, then operation and integration must be strictly separated. If you're a fan of the SOLID principles, you'll recognize this as a consistent application of the Single Responsibility Principle (SRP).</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:96436303,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/the-single-responsibility-principle&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;The Single Responsibility Principle&quot;,&quot;truncated_body_text&quot;:&quot;There is no question about how highly the Single Responsibility Principle (SRP) is valued among clean code developers. It&#8217;s the first of the SOLID principles for a reason. However&#8230; I have yet to meet a developer who&#8217;s able to succinctly explain what the SRP actually means. Especially hard to define seems its core term&quot;,&quot;date&quot;:&quot;2023-01-13T16:16:37.231Z&quot;,&quot;like_count&quot;:1,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/the-single-responsibility-principle?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Single Responsibility Principle</div></div><div class="embedded-post-body">There is no question about how highly the Single Responsibility Principle (SRP) is valued among clean code developers. It&#8217;s the first of the SOLID principles for a reason. However&#8230; I have yet to meet a developer who&#8217;s able to succinctly explain what the SRP actually means. Especially hard to define seems its core term&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; 1 like &#183; Ralf Westphal</div></a></div><p>Remember: Where there's data flow, there needs to be somebody &#8222;to dig the ditch for the data for flow in&#8220;. The processing steps in a data flow don't do this themselves.</p><p>But integration is essential not only for "piecing together" objects into data flows. It's also why Radical Object-Orientation scales. The fact that integration resembles a biological cell with organelles - the objects it integrates - is no coincidence.</p><div><hr></div><p>To get a different perspective on the IOSP you can read two earlier articles on it. They document how the principle underwent some change over time.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:65193590,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/integration-operation-segregation&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;Integration Operation Segregation Principle (IOSP)&quot;,&quot;truncated_body_text&quot;:&quot;If there is one principle in clean code development that's my north star, then that's the Integration Operation Segregation Principle, the IOSP. It guides my code design, it guides my code refactoring, it guides my code reviews. It's very, very simple and clear. But it has a profound impact on a codebase. Sometimes it seems impossible to follow &#8212; but onc&#8230;&quot;,&quot;date&quot;:&quot;2022-08-03T06:00:12.620Z&quot;,&quot;like_count&quot;:5,&quot;comment_count&quot;:3,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/integration-operation-segregation?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Integration Operation Segregation Principle (IOSP)</div></div><div class="embedded-post-body">If there is one principle in clean code development that's my north star, then that's the Integration Operation Segregation Principle, the IOSP. It guides my code design, it guides my code refactoring, it guides my code reviews. It's very, very simple and clear. But it has a profound impact on a codebase. Sometimes it seems impossible to follow &#8212; but onc&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 years ago &#183; 5 likes &#183; 3 comments &#183; Ralf Westphal</div></a></div><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:73576215,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/iosp-20&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;IOSP 2.0&quot;,&quot;truncated_body_text&quot;:&quot;To me the Integration Operation Segregation Principle (IOSP) is maybe the most important principle of clean code development. The reason: It&#8217;s so simple to follow. Because you can recognize if it&#8217;s been applied by looking at the code alone. IOSP code has a certain form. A form that supports understandability and testability.&quot;,&quot;date&quot;:&quot;2022-11-16T12:17:15.520Z&quot;,&quot;like_count&quot;:1,&quot;comment_count&quot;:6,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/iosp-20?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">IOSP 2.0</div></div><div class="embedded-post-body">To me the Integration Operation Segregation Principle (IOSP) is maybe the most important principle of clean code development. The reason: It&#8217;s so simple to follow. Because you can recognize if it&#8217;s been applied by looking at the code alone. IOSP code has a certain form. A form that supports understandability and testability&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">4 years ago &#183; 1 like &#183; 6 comments &#183; Ralf Westphal</div></a></div><p></p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #05: It's All About Data Flowing]]></title><description><![CDATA[This is where Radical Object-Orientation breaks with the mainstream]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-05-its</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-05-its</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Wed, 28 Feb 2024 15:56:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!va15!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The paradigm of mainstream object-orientation is one of dependency and functional hierarchy. I believe that this structure of software wasn't borrowed from mechanical engineering or electrical engineering, but rather from the military or corporate organization.</p><p>In mainstream object-orientation, one object commands another, waits for its execution report and the results. Then, it proceeds with its work until it issues commands to another object. In business, this is often called delegation: The manager delegates tasks to subordinates, controls their results, adds something, removes something, corrects, and then delegates again. Traditionally, companies are made up of a command-and-control hierarchy. So is your code.</p><p>Nature operates differently. No cell gives orders to another, controls their work, or even waits for them. Cells simply coexist side by side and &#8222;do their thing&#8220; in response to what other cells around them are doing. Each is only responsible for perfectly performing its own function. There are no cells above or below them.</p><p>It's incredible that organisms from tardigrades to blue whales exist and live, which are much, much more complex than any software.</p><p>How is that possible? I think it's the paradigm. Command-and-control doesn't scale. Complexity cannot be managed with functional dependency.</p><p>The paradigm of nature is&#8230; flow. Not control flow, but data flow.</p><blockquote><p>From my point of view, Alan Kay's core idea is therefore to build software from data flows. </p></blockquote><p>The data flowing being messages.</p><p>For him, a data flow should consist of objects that each do their own thing independently and are connected in data flows. Some hold state, others do not.</p><p>Objects understand different input messages and produce different output messages. Data flow connections between them reflect this. In the image, an arrow only goes from one object to another if the messages produced are fundamentally acceptable to the receiving one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!va15!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!va15!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 424w, https://substackcdn.com/image/fetch/$s_!va15!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 848w, https://substackcdn.com/image/fetch/$s_!va15!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 1272w, https://substackcdn.com/image/fetch/$s_!va15!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!va15!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png" width="1456" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:414,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!va15!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 424w, https://substackcdn.com/image/fetch/$s_!va15!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 848w, https://substackcdn.com/image/fetch/$s_!va15!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 1272w, https://substackcdn.com/image/fetch/$s_!va15!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8268b466-5e7e-4d63-ace9-9258c9694629_2116x602.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Objects are connected in data flows</figcaption></figure></div><p>Thus, several arrows can run to an object (e.g. C) because it can understand different messages. Or several arrows can run from an object because it can produce different messages (e.g. B).</p><p>Even though Alan Kay's idea has not become mainstream object-orientation and a data flow paradigm probably has not played a role for you so far, data flows are not unknown in software development.</p><p>Since Unix began its triumph in the early 1970s, there have been data flows on the command line, for example:</p><pre><code>cat words.txt | sort | uniq &gt; uniquewords.txt</code></pre><p>The "object" <em>cat</em> lists the content of the file <em>words.txt</em>; the "object" <em>sort</em> sorts the content alphabetically; finally, the "object" <em>uniq</em> selects only the different words from it; in the end, the result flows into the file <em>uniquewords.txt</em>.</p><p>Unfortunately, this way of thinking has not extended into programming languages for applications. In C, in which Unix was programmed, there is no trace of it - and therefore later also not in C++, Java, C#.</p><p>You see, at the end of the 1960s and beginning of the 1970s, software development could have taken a different turn. Another paradigm - I even think: a better one - was in the air. But the opportunity was missed.</p><p>Maybe it was because people were afraid (or too tired) to deeply analyze Alan Kay's analogy. But therein lies a second important, relieving principle...</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #04: Objects Don't Need Each Other]]></title><description><![CDATA[Radical Object-Orientation is getting rid of functional dependency]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-04-objects</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-04-objects</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Tue, 27 Feb 2024 15:53:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tWAJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The mutual unfamiliarity, even ignorance, of objects in Radical Object-Orientation simply cannot be overstated, I believe. It harbors a very crucial intuition: Complex systems, such as multicellular organisms or even automobiles, are composed of parts that are independent of one another.</p><p>No part needs another part to function. What each part needs is appropriate input, that is, messages it understands, and a suitable environment. That's why a biological cell can survive outside the body in a Petri dish. Or why an engine can operate on a test stand without needing a chassis underneath or a body around it.</p><p>I call this <strong>functional independence</strong>.</p><p>Nature and even technology know no functional dependencies. All parts exist by themselves. They are ready to receive something that stimulates them to activity (aka their functionality). This includes producing something that can stimulate others to activity. Yet, no part is aware of who stimulates it or whom it stimulates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tWAJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tWAJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 424w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 848w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tWAJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png" width="1287" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1287,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tWAJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 424w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 848w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!tWAJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe875a8e2-36d6-45c6-a7f8-fcf98f267367_1287x1000.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Look closely how object are connected: mainstream objects need each other, radical objects don't.</figcaption></figure></div><p>The image highlights this difference from mainstream object orientation:</p><ul><li><p>Your mainstream objects know each other. They are made dependent on each other through request-response relationships. Object A needs Object B to do its job, for its own functionality; therefore, it sends a request to do something and waits for the result. Only then does it proceed with its own task. A's functionality depends on B's. That's why A and B are not connected by an arrow; instead, the dot at the end of the connecting line signifies that A is clinging to B.</p></li><li><p>It's different with Radical Object Orientation as per Alan Kay. Here, Object S simply generates a message as part of its functionality, and that flows to Object T, which then does its job. S is not dependent on T, and T is not dependent on S.</p></li></ul><p>Can you guess what this means for objects in your code? They can no longer refer to each other; there are no pointers between objects anymore. Object S has no reference to Object T. Objects in Radical Object-Orientation are fundamentally "wired" in a different manner.</p><p>Why is it good that objects are no longer functionally dependent on each other? They are easier to test. Because when you test an object, you don't have to worry about how the behavior of another object, from which the test subject requests a service, plays into the test. Such dependencies no longer exist. Each object works solely with the messages that flow into it and the state it holds.</p><p>Furthermore, you can understand such independent objects more easily. When you look at the code, you don't have to constantly wonder what's happening in objects to which a task is delegated. You don't have to constantly move up and down a hierarchy. Each object stands on its own. If you know the incoming message and its state, then by looking at just that one object, you can figure out what it does.</p><p>Sounds crazy, right? How can anything larger than a single object work at all then? Don't worry! You just have to be open to changing your way of thinking. The paradigm of Radical Object-Orientation is very different from that of structured programming or mainstream object-orientation. As I said, #radicaloo goes to the root.</p><div><hr></div><p>For another take on functional independence this article:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:76627655,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/functional-dependencies&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;Functional Dependencies&quot;,&quot;truncated_body_text&quot;:&quot;Functional dependencies are the bane of programming. They just cause problems: testability decreases, understandability decreases, function size increases the more functional dependencies proliferate. Hence in one word: Don&#8217;t! Don&#8217;t mess up your codebase with functional dependencies.&quot;,&quot;date&quot;:&quot;2023-02-09T09:58:42.302Z&quot;,&quot;like_count&quot;:2,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/functional-dependencies?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Functional Dependencies</div></div><div class="embedded-post-body">Functional dependencies are the bane of programming. They just cause problems: testability decreases, understandability decreases, function size increases the more functional dependencies proliferate. Hence in one word: Don&#8217;t! Don&#8217;t mess up your codebase with functional dependencies&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; 2 likes &#183; Ralf Westphal</div></a></div>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #03: The Principle of Mutual Oblivion (PoMO)]]></title><description><![CDATA[A paradigm needs principles, doesn't it. Here's the first one.]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-03-the</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-03-the</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Mon, 26 Feb 2024 13:46:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4Vtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Radical Object-Orientation means stateful (autonomous) objects communicate unidirectionally (asynchronously) through messages. At least that's the gist of Alan Kay's original idea, which he introduced back in 1966 or 1967 using a biological analogy.</p><p>This concept never really made it into mainstream programming by the end of the 1980s with C++ and subsequent languages.</p><p>But there's more to it!</p><p>Because the abstracted "circuit diagram" with objects suggests something that doesn't exist.</p><p>When you see two objects connected by an arrow, you probably instinctively think that it represents a request-response relationship between the objects and, therefore, the object from which the arrow originates knows the other object where the arrow ends. But that's not the case!</p><p>In nature, there are no request-response relationships. No cell (like a nerve cell) sends a message to another (like a muscle cell) and waits for a reply.</p><p>In fact, no cell "knows" another. In the neuromuscular junction, the nerve cell has no knowledge of a muscle cell and vice versa.</p><p>Both cells only recognize the messenger Acetylcholine: the nerve cell knows when and how to produce it and releases it; the muscle cell can detect it and responds accordingly.</p><p>Cells just live and weave alongside each other, oblivious to the others. They have no demands on each. Triggered by a message, they simply do what's in their nature: they change their state and possibly produce messages to &#8222;push out&#8220;.</p><p>I consider this a truly important feature in Alan Kay's analogy. It's definitely to be adopted in object-oriented programming to do justice to his idea. I find it so crucial that I want to distill it into a principle:</p><blockquote><p>Principle of Mutual Oblivion (PoMO)</p></blockquote><p>PoMO states: "Thou shalt not let thy objects know each other.&#8220; They ignore one another and only share messages. There is a "message contract", but no cooperation or even subordination contract.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Vtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Vtn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 424w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 848w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 1272w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Vtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png" width="1416" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1416,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4Vtn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 424w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 848w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 1272w, https://substackcdn.com/image/fetch/$s_!4Vtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf3ac1b9-43ad-45c5-a975-c5bc43c290f4_1416x776.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Object's cooperating without knowing each other</figcaption></figure></div><p>In the illustration, this is expressed by the flow of Acetylcholine coming out of the nerve cell, but not going directly to the muscle cell. And Acetylcholine flows towards the muscle cell, but it doesn't come directly from the nerve cell. Both flows are initially independent of each other. Only an explicit coupling allows messages to flow from one cell to the other.</p><p>The continuous arrow in the first abstraction of the biological analogy was a simplification. To deeply understand Alan Kay's idea, you need to look closer. The fundamental independence of objects is key!</p><p>Isn't that radically different from mainstream object-orientation? It leads to an entirely different paradigm of "wiring" objects.</p><div><hr></div><p>For a different take on the PoMo see this article:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:138491497,&quot;url&quot;:&quot;https://ralfwestphal.substack.com/p/principle-of-mutual-oblivion-pomo&quot;,&quot;publication_id&quot;:678309,&quot;publication_name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;title&quot;:&quot;Principle of Mutual Oblivion (PoMO)&quot;,&quot;truncated_body_text&quot;:&quot;Do you know what object-orientation (OO) is? Really? Do you know, who invented the term? Do you know what he meant by it? Probably not, because&#8230; well, it&#8217;s usually not taught when you learn about OO programming with your favourite programming language.&quot;,&quot;date&quot;:&quot;2023-11-02T09:33:07.515Z&quot;,&quot;like_count&quot;:6,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:39647040,&quot;name&quot;:&quot;Ralf Westphal&quot;,&quot;handle&quot;:&quot;ralfwestphal&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ce303ec4-f976-455b-aa45-04cc02d38f23_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Lebt in den bulgarischen Bergen, wo er weit weg vom Trubel urbanen Lebens und westlichen Konsums viel Zeit hat, &#252;ber allerlei nachzudenken und immer wieder neuen Projekten nachzugehen.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-01-11T09:18:37.548Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:611932,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678333,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:678333,&quot;name&quot;:&quot;Gedankenstrom Blog&quot;,&quot;subdomain&quot;:&quot;gedankenstrom&quot;,&quot;custom_domain&quot;:&quot;gedankenstrom.blog&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedankenstrom ist ein Blog, der sich mit kritischen Beobachtungen, Reflexionen und philosophischen Betrachtungen &#252;ber Leben, Gesellschaft und Zeitgeschehen besch&#228;ftigt. Wir laden unsere Leser ein, sich an einem dynamischen Diskurs zu beteiligen.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3e825b86-df38-40bc-a3a9-17fe4fc9f838_478x478.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#FF0000&quot;,&quot;created_at&quot;:&quot;2022-01-10T09:14:26.775Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Das Gedankenstrom Blog&quot;,&quot;copyright&quot;:&quot;Ralf Westphal &amp; Rico Fritzsche&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:611908,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:678309,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:678309,&quot;name&quot;:&quot;Ralf Westphals Newsletter&quot;,&quot;subdomain&quot;:&quot;ralfwestphal&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Gedanken zur Softwaretechnik, meinem Business, aber auch zu Gesellschaft und Politik.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#2EE240&quot;,&quot;created_at&quot;:&quot;2022-01-10T08:58:37.822Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;en&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:764035,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:825059,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:825059,&quot;name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;subdomain&quot;:&quot;workwithease&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Alles f&#252;r die produktivere und zufriedenere Arbeit im Office&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/64161464-268c-410b-94da-40000a1bd76f_300x300.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2022-04-01T05:11:20.965Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;Der WORK WITH EASE Newsletter&quot;,&quot;copyright&quot;:&quot;Andrea Kaden&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:&quot;de&quot;,&quot;explicit&quot;:false}},{&quot;id&quot;:2437322,&quot;user_id&quot;:39647040,&quot;publication_id&quot;:2412152,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:2412152,&quot;name&quot;:&quot;Radical Object-Orientation&quot;,&quot;subdomain&quot;:&quot;radicalobjectorientation&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Object-orientation grown from its roots&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93363d1d-3ef2-48e2-a2fd-6935940858e7_256x256.png&quot;,&quot;author_id&quot;:39647040,&quot;theme_var_background_pop&quot;:&quot;#E8B500&quot;,&quot;created_at&quot;:&quot;2024-03-09T09:52:51.759Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Ralf Westphal&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://ralfwestphal.substack.com/p/principle-of-mutual-oblivion-pomo?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!IJl2!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F615b4a6e-47ca-4fa4-b4bc-0ce9628194b0_413x413.png" loading="lazy"><span class="embedded-post-publication-name">Ralf Westphals Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Principle of Mutual Oblivion (PoMO)</div></div><div class="embedded-post-body">Do you know what object-orientation (OO) is? Really? Do you know, who invented the term? Do you know what he meant by it? Probably not, because&#8230; well, it&#8217;s usually not taught when you learn about OO programming with your favourite programming language&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; 6 likes &#183; 2 comments &#183; Ralf Westphal</div></a></div>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #02: Simplifying the Picture]]></title><description><![CDATA[Developers like boxes and lines]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-02-simplifying</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-02-simplifying</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Fri, 23 Feb 2024 13:37:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rpas!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Alan Kay's biological analogy for object orientation can be quite elegantly abstracted, in my opinion.</p><ul><li><p>Objects turn into simple geometric shapes, like an ellipse or a box, labeled with an object identifier.</p></li><li><p>Messages transform into labeled arrows indicating what is exchanged.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rpas!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rpas!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 424w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 848w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 1272w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rpas!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:567460,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rpas!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 424w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 848w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 1272w, https://substackcdn.com/image/fetch/$s_!Rpas!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02d23cc-3c16-42ca-9f1f-683663bd774e_1682x940.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Removing the &#8220;wet details&#8221; from Alan Kay&#8217;s analogy for a more developer friendly image of what object-orientation was supposed to be</figcaption></figure></div><p>Do you find this visual translation and simplification helpful? Does it make sense to you?</p><p>Great, because now we need to dive into a few specifics. Two of these were always mentioned by Alan Kay, and one was not.</p><ol><li><p>Objects can have an internal <strong>state</strong>. They can store data across the processing of messages. Alan Kay referred to this as "local retention and protection and hiding of state-process". This is similar to biological cells, which have a state, like a certain contraction in muscle cells.</p></li><li><p>Messages flow strictly in one direction. For example, in the neuromuscular synapse, Acetylcholine flows only from the nerve cell to the muscle cell. The nerve cell is the producer of the neurotransmitter, and the muscle cell is the consumer. Given Alan Kay's careful choice of analogy, he must have intended the same <strong>unidirectional</strong> flow of messages for object orientation. However, as far as I know, Alan Kay never emphasized this.</p></li><li><p>Biological cells are living entities. Thus, they are <strong>autonomous</strong>. They are constantly active, not waiting for anything in particular. A muscle cell doesn't specifically wait for Acetylcholine from a nerve cell; it "does its thing" and changes its activity in response to Acetylcholine when received. Similarly, a nerve cell doesn't wait for its Acetylcholine to be received and processed by a muscle cell; it releases it and continues "with other things".</p></li></ol><p>In summary:</p><blockquote><p>Objects are autonomous functional units with an internal, hidden state, communicating only asynchronously and unidirectionally through messages.</p></blockquote><p>This is what Alan Kay meant with his biological analogy. &#8222;The big idea is &#8218;messaging&#8216;&#8220; and from that follows communication between objects always is only one-way.</p><p>That's our first important insight gained from taking Alan Kay seriously and looking closer.</p><p>Is this reflected in your object-oriented code? I believe, not. Or if so, then because you&#8217;re using an Actor framework or deploying services.</p><p>But is that really necessary? Does object orientation truly require distribution across various threads or even processes with all its complexity? I don&#8217;t think so.</p><p>However, we need to look more closely and ultimately consider how a translation to the synchronous features of your programming language might be possible.&nbsp;</p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #01: Visualizing the Analogy]]></title><description><![CDATA[Mind you: It wasn't about Lego blocks]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-01-visualizing</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-01-visualizing</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Thu, 22 Feb 2024 13:30:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-9e1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Radical object-orientation, to me, means taking Alan Kay's original idea seriously:</p><blockquote><p>"I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages" [1]</p></blockquote><p>I believe it's worthwhile to take a closer look at his analogy - and then derive how radically object-oriented code could look.</p><p>I'll start with the obvious components of the analogy:</p><p>- Biological cells</p><p>- Messages (aka neurotransmitters)</p><p>Both components can be found, for instance, at the so-called neuromuscular junctions in your body. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-9e1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-9e1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 424w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 848w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 1272w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-9e1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png" width="600" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:325168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-9e1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 424w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 848w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 1272w, https://substackcdn.com/image/fetch/$s_!-9e1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe62c7443-04bf-4fc8-99ab-f8fff38c741a_600x437.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.naxlex.com/questions/what-is-the-function-of-the-neuromuscular-junction">Source</a></figcaption></figure></div><p>There, nerve cells and muscle cells come together. They communicate, among other things, through the neurotransmitter molecule Acetylcholine (ACh). Let's break it down in simple terms, as ChatGPT would explain it:</p><div><hr></div><p><em>The neuromuscular synapse is where a nerve cell (neuron) and a muscle cell (muscle fiber) work together:</em></p><p><em>1. The nerve cell sends electrical signals, called action potentials, down its long, thin extension called an axon.</em></p><p><em>2. At the end of the axon, there are small structures called synaptic terminals. These terminals release chemicals called neurotransmitters (Acetylcholine) into the space between the nerve cell and the muscle cell.</em></p><p><em>3. The neurotransmitters travel across this gap and bind to receptors on the surface of the muscle cell.</em></p><p><em>4. When the neurotransmitters bind to the receptors, they cause changes in the muscle cell that lead to the generation of an action potential in the muscle cell.</em></p><p><em>5. The action potential then travels along the muscle cell, causing it to contract and produce movement.</em></p><p><em>So, in summary, the nerve cell sends signals to the muscle cell using neurotransmitters, which then triggers the muscle cell to contract and create movement.</em></p><div><hr></div><p>Alright? And that's exactly how your code should be structured and function. That was Alan Kay's idea.</p><p>Do you see how the two (types of) cells communicate using messages? That&#8217;s very important because, as you hopefully remember, &#8222;the big idea is &#8218;messaging&#8216;&#8220;, as Alan Kay said.</p><p>But if you're not immediately sure how to implement this in C# or Java or TypeScript, I totally understand. I also had to ponder to recognize the principles embedded in this. It's helpful to simplify and formalize the complex biological reality. For that stay tuned for the next post.</p><div><hr></div><p>[1] <a href="https://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en">https://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en</a></p>]]></content:encoded></item><item><title><![CDATA[Radical Object-Orientation #00: The Birth of the Term 'Object']]></title><description><![CDATA[And how it wasn't even the most important term]]></description><link>https://radicalobjectorientation.substack.com/p/radical-object-orientation-01-alan</link><guid isPermaLink="false">https://radicalobjectorientation.substack.com/p/radical-object-orientation-01-alan</guid><dc:creator><![CDATA[Ralf Westphal]]></dc:creator><pubDate>Wed, 21 Feb 2024 10:36:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!K09S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The object-oriented paradigm isn't functioning as originally envisioned. It's not delivering on its promises. It hasn't simply made your code more adaptable or easier for others to grasp. Instead, you'll often find yourself uncertain about how best to apply object-oriented principles to solve a problem. And most likely, you won't see a clear path from a problem statement to code; you'll find yourself just "muddling through."</p><p>If these statements resonate with you, perhaps you're interested in embarking on a little journey with me. In small steps, I'd like to introduce you to a different approach to object-orientation that can help you overcome uncertainties and arrive at cleaner solutions more easily. Personally, this alternative approach has greatly facilitated my software development efforts over the years. It's part of what I call "Programming with Ease."</p><p>From my perspective, this alternative approach represents a radical form of object-orientation. Radical, because it goes to the root of the concept (Latin: radix = root); radical, because it looks quite different from what you've likely heard about object-orientation thus far.</p><p>Are you ready for the red pill? Do you want to see how deep the rabbit hole goes?</p><p>Then buckle up&#8230;</p><p>Here's the original "definition" of the term "object":</p><blockquote><p>"I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages" [1]</p></blockquote><p>Coined in the late 1960s by the visionary behind many developments in software development: Alan Kay [2]</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K09S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K09S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 424w, https://substackcdn.com/image/fetch/$s_!K09S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 848w, https://substackcdn.com/image/fetch/$s_!K09S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 1272w, https://substackcdn.com/image/fetch/$s_!K09S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K09S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png" width="766" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1477774,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K09S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 424w, https://substackcdn.com/image/fetch/$s_!K09S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 848w, https://substackcdn.com/image/fetch/$s_!K09S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 1272w, https://substackcdn.com/image/fetch/$s_!K09S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c26437-e295-4afe-a7bd-d4098f8587c8_766x764.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Midjourney&#8217;s portrait of Alan Kay among &#8220;objects&#8221;</figcaption></figure></div><p>Did you know that object-orientation has its roots in biology?</p><p>And Alan Kay also stated what he considers the most important aspect of object-orientation:</p><blockquote><p>"The big idea is 'messaging'" [3]</p></blockquote><p>and</p><blockquote><p>"messaging came at the very beginning" [1]</p></blockquote><p>Did you know that messages are at the core of object-orientation and not, for example, classes or inheritance?</p><blockquote><p>"[Object-orientation] is not even about classes. I'm sorry that I long ago coined the term 'objects' for this topic because it gets many people to focus on the lesser idea." [3]</p></blockquote><p>Therefore, it's no wonder to me that attempts to program cleanly with object-orientation since the late 1980s, with languages like C++ and its more or less closely related successors (e.g., Delphi, Java, C#, Ruby, Python), haven't been as successful as hoped. Yes, things have changed since C and Pascal or Fortran, but the potential inherent in Alan Kay's idea hasn't been fully realized.</p><p>For Alan Kay, object-orientation is quite simple:</p><blockquote><p>"OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things." [1]</p></blockquote><p>Messages are the brackets ("only messaging," "late-binding") around encapsulated state ("hiding of state-process").</p><p>Does your approach to object-orientation align with this conception? Most likely not. I believe that's because Alan Kay himself didn't explain enough about what he meant with his original idea. Even the language he co-developed, Smalltalk, didn't fully address this.</p><p>Yet, there's a lot to unpack in his analogy with biological cells. We just need to take a closer look. That's what I aim to do with further postings. Stay tuned if you're interested&#8230;</p><div><hr></div><p>[1]&nbsp; <a href="https://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en">https://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en</a></p><p>[2] <a href="https://en.wikipedia.org/wiki/Alan_Kay">https://en.wikipedia.org/wiki/Alan_Kay</a></p><p>[3] <a href="https://wiki.c2.com/?AlanKayOnMessaging">https://wiki.c2.com/?AlanKayOnMessaging</a> </p>]]></content:encoded></item></channel></rss>