Composition stores one object inside another object.

composition Composition builds larger objects from smaller objects.

Composition

city
Composition.cs
Replay: real traced execution (multi-file project)
using System;

class Address
{
    public string City;

    public Address(string city)
    {
        City = city;
    }
}

class Customer
{
    public string Name;
    public Address Address;

    public Customer(string name, Address address)
    {
        Name = name;
        Address = address;
    }
}

class Program
{
    static void Main()
    {
        string city = "Lima";
        Address address = new Address(city);
        Customer customer = new Customer("Mira", address);
        string summary = customer.Name + "@" + customer.Address.City;

        Console.WriteLine($"city={city}");
        Console.WriteLine($"summary={summary}");
    }
}
using System;

class Address
{
    public string City;

    public Address(string city)
    {
        City = city;
    }
}

class Customer
{
    public string Name;
    public Address Address;

    public Customer(string name, Address address)
    {
        Name = name;
        Address = address;
    }
}

class Program
{
    static void Main()
    {
        string city = "Oslo";
        Address address = new Address(city);
        Customer customer = new Customer("Mira", address);
        string summary = customer.Name + "@" + customer.Address.City;

        Console.WriteLine($"city={city}");
        Console.WriteLine($"summary={summary}");
    }
}
using System;

class Address
{
    public string City;

    public Address(string city)
    {
        City = city;
    }
}

class Customer
{
    public string Name;
    public Address Address;

    public Customer(string name, Address address)
    {
        Name = name;
        Address = address;
    }
}

class Program
{
    static void Main()
    {
        string city = "Cairo";
        Address address = new Address(city);
        Customer customer = new Customer("Mira", address);
        string summary = customer.Name + "@" + customer.Address.City;

        Console.WriteLine($"city={city}");
        Console.WriteLine($"summary={summary}");
    }
}
  1. city ← Lima

    26{27    static void Main()28    {29        string city→ Lima = "Lima"; //@city="Oslo", "Cairo"30        Address address = new Address(city);31        Customer customer = new Customer("Mira", address);
  2. public Address(string city)

    7public Address(string cityLima)8{9    City = cityLima;10}
  3. address ← Address

    29string city = "Lima"; //@city="Oslo", "Cairo"30Address address→ Address = new Address(city);31Customer customer = new Customer("Mira", address);32string summary = customer.Name + "@" + customer.Address.City;
  4. public Customer(string name, Address address)

    18public Customer(string nameMira, Address addressAddress)19{20    Name = nameMira;21    Address = addressAddress;22}
  5. customer ← Customer, summary ← Mira@Lima

    30    Address address = new Address(city);31    Customer customer→ Customer = new Customer("Mira", address);32    string summary→ Mira@Lima = customer.NameMira + "@" + customer.Address.CityLima;3334    Console.WriteLine($"city={cityLima}");35    Console.WriteLine($"summary={summaryMira@Lima}");36}
    outputcity=Lima
    summary=Mira@Lima
  1. city ← Oslo

    26{27    static void Main()28    {29        string city→ Oslo = "Oslo";30        Address address = new Address(city);31        Customer customer = new Customer("Mira", address);
  2. public Address(string city)

    7public Address(string cityOslo)8{9    City = cityOslo;10}
  3. address ← Address

    29string city = "Oslo";30Address address→ Address = new Address(city);31Customer customer = new Customer("Mira", address);32string summary = customer.Name + "@" + customer.Address.City;
  4. public Customer(string name, Address address)

    18public Customer(string nameMira, Address addressAddress)19{20    Name = nameMira;21    Address = addressAddress;22}
  5. customer ← Customer, summary ← Mira@Oslo

    30    Address address = new Address(city);31    Customer customer→ Customer = new Customer("Mira", address);32    string summary→ Mira@Oslo = customer.NameMira + "@" + customer.Address.CityOslo;3334    Console.WriteLine($"city={cityOslo}");35    Console.WriteLine($"summary={summaryMira@Oslo}");36}
    outputcity=Oslo
    summary=Mira@Oslo
  1. city ← Cairo

    26{27    static void Main()28    {29        string city→ Cairo = "Cairo";30        Address address = new Address(city);31        Customer customer = new Customer("Mira", address);
  2. public Address(string city)

    7public Address(string cityCairo)8{9    City = cityCairo;10}
  3. address ← Address

    29string city = "Cairo";30Address address→ Address = new Address(city);31Customer customer = new Customer("Mira", address);32string summary = customer.Name + "@" + customer.Address.City;
  4. public Customer(string name, Address address)

    18public Customer(string nameMira, Address addressAddress)19{20    Name = nameMira;21    Address = addressAddress;22}
  5. customer ← Customer, summary ← Mira@Cairo

    30    Address address = new Address(city);31    Customer customer→ Customer = new Customer("Mira", address);32    string summary→ Mira@Cairo = customer.NameMira + "@" + customer.Address.CityCairo;3334    Console.WriteLine($"city={cityCairo}");35    Console.WriteLine($"summary={summaryMira@Cairo}");36}
    outputcity=Cairo
    summary=Mira@Cairo