{"id":9076,"date":"2024-10-30T10:51:21","date_gmt":"2024-10-30T09:51:21","guid":{"rendered":"https:\/\/oopm.org\/?page_id=9076"},"modified":"2025-01-16T06:56:40","modified_gmt":"2025-01-16T05:56:40","slug":"5-1-new-reference-data-items","status":"publish","type":"page","link":"https:\/\/oopm.org\/?page_id=9076","title":{"rendered":"5.1 Reference data-items"},"content":{"rendered":"<div class=\"pdfprnt-buttons pdfprnt-buttons-page pdfprnt-top-right\"><a href=\"https:\/\/oopm.org\/index.php?rest_route=wpv2pages9076&print=pdf\" class=\"pdfprnt-button pdfprnt-button-pdf\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/oopm.org\/wp-content\/plugins\/pdf-print\/images\/pdf.png\" alt=\"image_pdf\" title=\"View PDF\" \/><\/a><a href=\"https:\/\/oopm.org\/index.php?rest_route=wpv2pages9076&print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/oopm.org\/wp-content\/plugins\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Print Content\" \/><\/a><\/div>\n<p class=\"wp-block-paragraph\">In this section, we further describe data-items holding references to objects.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have in previous sections like <script>mkRef(\"Introducing a Customer class\")<\/script> seen declarations of the form:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JohnSmithProfile: <strong>obj<\/strong> Customer(\"John Smith\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This declaration implies the generation of an instance of the&nbsp;<code>Customer<\/code>&nbsp;class with&nbsp;<code>\"John Smith\"<\/code>&nbsp;as the actual parameter. This object is generated as part of the generation of the object containing the <code><strong>obj<\/strong><\/code> declaration, and exists during the lifetime of this object. An object generated by an <strong><code>obj<\/code><\/strong> declaration is called an <em>intrinsic objec<\/em>t.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\"> <\/mark>The data-item&nbsp;<code>JohnSmithProfile<\/code>&nbsp;is a <em>constant reference<\/em> that refers to this intrinsic object during the life-time of the program execution. We will for short say that <code>JohnSmithProfile<\/code> is an intrinsic object.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have also seen examples of declarations of the form:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aCustomer: <strong>ref<\/strong> Customer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The data-item&nbsp;<code>aCustomer<\/code>&nbsp;is a reference variable that may refer to different&nbsp;<code>Customer<\/code>&nbsp;objects during the life-time of the program execution. Initially it holds the reference&nbsp;<code>none<\/code>, which means that it refers to no object. <code>none<\/code> is thus the default value for a reference variable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We have also seen examples of assignment of references that has the effect that two or more references may refer to the same object.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the next sections, we describe reference assignment in details. We also describe comparisons of references, parameter transfer of references<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\"> <\/mark>and the type rules for reference assignment and comparison.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reference assignment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here we will summarise assignment of references in general. We use class&nbsp;<code>Customer<\/code>&nbsp;for the example and we use the following ghost object because in a program for a real bank there would be no object with the description below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aGhost: <strong>obj<\/strong><br>   JohnSmithProfile: <strong>obj<\/strong> Customer(\"John Smith\")<br>   LizaJonesProfile: <strong>obj<\/strong> Customer(\"Liza Jones\")<br>   customerA, customerB: <strong>ref<\/strong> Customer<br>   customerA := JohnSmithProfile<br>   customerB := LizaJonesProfile <br>   customerA := customerB<br><br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In the above example, we have two&nbsp;<code>Customer<\/code>&nbsp;objects&nbsp;<code>JohnSmithProfile<\/code>&nbsp;and&nbsp;<code>LizaJonesProfile<\/code>, and two reference variables&nbsp;<code>customerA<\/code>&nbsp;and&nbsp;<code>customerB<\/code>. The following snaphots illustrates the effect of reference assignments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first snapshot shows the situation after generation of <code>aGhost<\/code> &#8211; marked by the red arrow (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">&#8211;&gt;<\/mark>). Here <code>JohnSmithsProfile<\/code> refers to <code>Customer(\"John Smith\")<\/code> and <code>LizaJonesProfile<\/code> refers to <code>Customer(\"Liza Jones\")<\/code>. The reference variable <code>customerA<\/code> and <code>customerB<\/code> are both <code>none<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code> aGhost: <strong>obj<\/strong>\n    JohnSmithProfile: <strong>obj<\/strong> Customer(\"John Smith\")\n    LizaJonesProfile: <strong>obj<\/strong> Customer(\"Liza Jones\")\n    customerA, customerB: <strong>ref<\/strong> Customer\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">--&gt;<\/mark> customerA := JohnSmithProfile\n    customerB := LizaJonesProfile \n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">   <\/mark> customerA := customerB<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"573\" height=\"229\" src=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioA.jpg\" alt=\"\" class=\"wp-image-11275\" srcset=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioA.jpg 573w, https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioA-300x120.jpg 300w\" sizes=\"(max-width: 573px) 100vw, 573px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-tiny-font-size wp-block-paragraph\">Snapshot A<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next snapshot shows the situation after the assignment <code>customerB := LizaJonesProfile<\/code>. As can be seen, <code>customerB<\/code> and <code>LizaJonesProfile<\/code> now both refer to the same object:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code> aGhost: <strong>obj<\/strong>\n    JohnSmithProfile: <strong>obj<\/strong> Customer(\"John Smith\")\n    LizaJonesProfile: <strong>obj<\/strong> Customer(\"Liza Jones\")\n    customerA, customerB: <strong>ref<\/strong> Customer\n    customerA := JohnSmithProfile\n    customerB := LizaJonesProfile \n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">--&gt;<\/mark> customerA := customerB<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"575\" height=\"232\" src=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioB.jpg\" alt=\"\" class=\"wp-image-11276\" srcset=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioB.jpg 575w, https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioB-300x121.jpg 300w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-tiny-font-size wp-block-paragraph\">Snapshot B<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The final snapshot shows the situation after execution of <code>customerA := customerB<\/code>. As can be seen, <code>customerA<\/code> and <code>customerB<\/code> now both refer to <code>LizaJonesProfile<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<pre class=\"wp-block-code\"><code> aGhost: <strong>obj<\/strong>\n    JohnSmithProfile: <strong>obj<\/strong> Customer(\"John Smith\")\n    LizaJonesProfile: <strong>obj<\/strong> Customer(\"Liza Jones\")\n    customerA, customerB: ref Customer\n    customerA := JohnSmithProfile\n    customerB := LizaJonesProfile \n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">   <\/mark> customerA := customerB\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\">--&gt;<\/mark><\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"577\" height=\"270\" src=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioC.jpg\" alt=\"\" class=\"wp-image-11277\" srcset=\"https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioC.jpg 577w, https:\/\/oopm.org\/wp-content\/uploads\/2025\/01\/ScenarioC-300x140.jpg 300w\" sizes=\"(max-width: 577px) 100vw, 577px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center has-tiny-font-size wp-block-paragraph\">Snapshot C<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reference comparison<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We may also compare references using = (equality) and &lt;&gt; (inequality):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If Exp1 and Exp2 are expressions that evaluates to references Ref1<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\"> <\/mark>and<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-custom-color-3-color\"> <\/mark>Ref2, then the expression Exp1 = Exp2 is true if and only if Ref1 and Ref2 refer to the same object. If Ref1 and Ref2 refer to different objects then Exp1 = Exp2 evaluates to false.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similarly the expression Exp1 &lt;&gt; Exp2 is true if and only if Ref1 and Ref2 does not refer to the same object. If Ref1 and Ref2 refer to the same object then Exp1 = Exp2 evaluates to false.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Below, we show the value of some boolean expressions involving comparison of references, using = (equality) and &lt;&gt; (inequality) at Snapshot B and Snapshot C above.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the situation at Snapshot<em> <\/em>B above, we have the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JohnSmithProfile = LizaSmithProfile    -- false, they refer to different objects \nJohnSmithProfile &lt;&gt; LizaSmithProfile   -- true, they refer to the same object\nJohnSmithProfile = customerA           -- true, they refer to the same object\nJohnSmithProfile &lt;&gt; customerB          -- false, they refer to different objects<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first comment <code>-- false, they refer to different objects<\/code> is meant to say that the expression <code>JohnSmithProfile = LizaSmithProfile<\/code> evaluates to the value <code>false<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The situation at Snapshot C after the assignment <code>customerA := customerB<\/code> is as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JohnSmithProfile = customerA   -- false\ncustomerA = customerB          -- true\nLizaJonesProfile = customerA   -- true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assignment between data items being references is called r<em>eference assignment<\/em> and comparison of references is called <em>reference comparison<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reference assignment and reference comparison is fundamentally different from assignment between data items representing values. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>withdraw<\/code> method has a statement:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>newB := balance<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here the value held by <code>balance<\/code> is <em>copied<\/em> to <code>newB<\/code>, which then holds the same value as <code>balance<\/code>. The data items <code>newB<\/code> and <code>balance<\/code> are not references to objects. As we shall se in section X, they are special kinds of objects called <em>value objects<\/em> that may represent values &#8211; in section <script>mkRef(\"Value assignment and comparison\");<\/script>, we describe <em>value assignment<\/em> and <em>value comparison<\/em>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Reference parameter passing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Passing a parameter as part of a method invocation or class instantiation is similar to assignment in the sense that the actual parameter is assigned to the formal parameter of the method or class respectively.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider the following example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>account_1010: <strong>obj<\/strong> Account(JohnSmithsProfile)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here an instance of <code>Account<\/code> is generated with <code>JohnSmithsProfile<\/code> as the actual parameter. First an instance of <code>Account<\/code> is generated and then <code>JohnSmithsProfile<\/code> is assigned to the <code>owner<\/code> reference variable of this <code>Account<\/code> object. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The execution of <code>Account(JohnSmithsProfile)<\/code> thus consists of the following steps:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:55%\">\n<p class=\"wp-block-paragraph\">The computer\/VM internally uses a reference variable, which we may name <code>anAccount<\/code>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:45%\">\n<pre class=\"wp-block-code\"><code><code>anAccount: <strong>ref<\/strong> Account<\/code><\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:55%\">\n<p class=\"wp-block-paragraph\">An <code>Account<\/code> object is generated and its reference is assigned to <code>anAccount<\/code>. Note the operation <code>new<\/code> is internal to the computer and it cannot be used in qBeta.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:45%\">\n<pre class=\"wp-block-code\"><code><code><code>anAccount := <strong>new<\/strong> Account <\/code><\/code><\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:55%\">\n<p class=\"wp-block-paragraph\">The reference to <code>JohnSmithsProfile<\/code> is assigned to the <code>owner<\/code> reference variable.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:45%\">\n<pre class=\"wp-block-code\"><code>anAccount.owner := JohnSmithsProfile<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:55%\">\n<p class=\"wp-block-paragraph\"> Finally the reference to the <code>Account<\/code> object is assigned to <code>account_1010<\/code>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:45%\">\n<pre class=\"wp-block-code\"><code><code><code>account_1010 := anAccount<\/code><\/code><\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Type rule for reference assignment and comparison<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As shown above, we may assign a reference to a <code>Customer<\/code> object to a reference variable that has the type <code>Customer<\/code>. It is not possible to assign a reference to an <code>Account<\/code> object to the reference variable <code>aCustomer<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In general the type of an expression in an assignment must be the same as the type of the reference variable being assigned to. This is also the case for passing an expression as an argument to a parameter of a method being a reference. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The above rule does also apply to comparisons using <code>=<\/code> (equality) and <code>&lt;&gt;<\/code> (inequality) where both arguments must be of the same type<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider the following example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aCustomerA, aCustomerB: <strong>ref<\/strong> Customer\nanAccountA, anAccountB: <strong>ref<\/strong> Account\nB: <strong>var<\/strong> Boolean\naCustomerA := Customer(\"John Smith\")   -- legal\nanAccountA := Account(aCustomerA)      -- legal\naCustomerA := anAccountA               -- illegal \nanAccountB := Account(anAccountA)      -- illegal \nB := aCustomerA = aCustomerB           -- legal\nB := aCustomerA &lt;&gt; anAccountA          -- illegal<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The assignment <code>anAccountB := Account(anAccountA)<\/code> is illegal since the <code>owner<\/code> parameter of <code>Account<\/code> is of type <code>Customer<\/code> whereas the argument <code>anAccountA<\/code> is of type <code>Account<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The purpose of the type rule is two fold: from a programming and modeling point of view it does not make sense to allow assignments like <code>aCustomerA := anAccountA<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Secondly the type rule is necessary to prevent errors at run-time. Assume that we allow the assignment then we may write code as<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aCustomerA := anAccountA\naCustomerA.addAccount(JohnSmithProfile)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This does not makes sense since an <code>Account<\/code> object does not have an <code>addAccount<\/code> method.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In chapter <script>mkRef(\"Subclasses and submethods\");<\/script>, we extend the type rule for assignment, parameter transfer and comparison.<\/p>\n<div style=\"display:flex; gap:10px;justify-content:center\" class=\"wps-pgfw-pdf-generate-icon__wrapper-frontend\">\n\t\t<a  href=\"https:\/\/oopm.org?action=genpdf&amp;id=9076\" class=\"pgfw-single-pdf-download-button\" ><img src=\"https:\/\/oopm.org\/wp-content\/plugins\/pdf-generator-for-wp\/admin\/src\/images\/PDF_Tray.svg\" title=\"Generate PDF\" style=\"width:auto; height:45px;\"><\/a>\n\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>In this section, we further describe data-items holding references to objects.&nbsp; We have in previous sections like seen declarations of the form: This declaration implies the generation of an instance of the&nbsp;Customer&nbsp;class with&nbsp;&#8220;John Smith&#8221;&nbsp;as the actual parameter. This object is generated as part of the generation of the object containing the obj declaration, and exists [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2270,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9076","page","type-page","status-publish","hentry"],"mb":[],"mfb_rest_fields":["title","gutenberg_elementor_mode"],"_links":{"self":[{"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/pages\/9076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oopm.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9076"}],"version-history":[{"count":42,"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/pages\/9076\/revisions"}],"predecessor-version":[{"id":11278,"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/pages\/9076\/revisions\/11278"}],"up":[{"embeddable":true,"href":"https:\/\/oopm.org\/index.php?rest_route=\/wp\/v2\/pages\/2270"}],"wp:attachment":[{"href":"https:\/\/oopm.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}