Blue Theme Orange Theme Green Theme Red Theme
 
Team Foundation Server Hosting
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
DevExpress UI Controls
Search :       Advanced Search »
Home » Visual C# » Difference between Composition and Aggregation

Difference between Composition and Aggregation

Apart from programming, a lot of my spare time sat at the computer is spent reading group, blog postings, etc from other developers. One particular posting that caught my eye recently provoked a lot of response and mixed answers to a question posed by a poster. This question was, ‘What is the difference between composition and aggregation and how would I express it in my programs?’

Page Views : 114316
Downloads : 0
Rating :
 Rate it
Level : Intermediate
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
Team Foundation Server Hosting
Become a Sponsor
Discover the top 5 tips for understanding .NET Interop
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 

Introduction:

Apart from programming, a lot of my spare time sat at the computer is spent reading group, blog postings, etc from other developers. One particular posting that caught my eye recently provoked a lot of response and mixed answers to a question posed by a poster. This question was, 'What is the difference between composition and aggregation and how would I express it in my programs'?

Reading the responses to the post, I had a mixed reaction, many of the responses reflected my understanding of the difference, others turned my understanding right around and explained composition as my understanding of aggregation.

This short article will put forward my understanding of composition and aggregation and how I would express it in C# code.

Composition:

As we know, inheritance gives us an 'is-a' relationship. To make the understanding of composition easier, we can say that composition gives us a 'part-of' relationship. Composition is shown on a UML diagram as a filled diamond (see Figure 1).

Figure 1 - Composition

If we were going to model a car, it would make sense to say that an engine is part-of a car. Within composition, the lifetime of the part (Engine) is managed by the whole (Car), in other words, when Car is destroyed, Engine is destroyed along with it. So how do we express this in C#?

public class Engine
{
 . . .
}

public class Car

{

    Engine e = new Engine();

    .......

}

As you can see in the example code above, Car manages the lifetime of Engine.

Aggregation:

If inheritance gives us 'is-a' and composition gives us 'part-of', we could argue that aggregation gives us a 'has-a' relationship. Within aggregation, the lifetime of the part is not managed by the whole. To make this clearer, we need an example. For the past 12+ months I have been involved with the implementation of a CRM system, so I am going to use part of this as an example.

The CRM system has a database of customers and a separate database that holds all addresses within a geographic area. Aggregation would make sense in this situation, as a Customer 'has-a' Address. It wouldn't make sense to say that an Address is 'part-of' the Customer, because it isn't. Consider it this way, if the customer ceases to exist, does the address? I would argue that it does not cease to exist. Aggregation is shown on a UML diagram as an unfilled diamond (see Figure 2). 

Figure 2 - Aggregation

So how do we express the concept of aggregation in C#? Well, it's a little different to composition. Consider the following code:

public class Address
{
 . . .
}

public class Person

{

     private Address address;

     public Person(Address address)

     {

         this.address = address;

     }

     . . .

}

Person would then be used as follows:

Address address = new Address();
Person person = new Person(address);

or

Person person = new Person( new Address() );

As you can see, Person does not manage the lifetime of Address. If Person is destroyed, the Address still exists. This scenario does map quite nicely to the real world.

Conclusion:

As I said at the beginning of the article, this is my take on composition and aggregation. Making the decision on whether to use composition or aggregation should not be a tricky. When object modelling, it should be a matter of saying is this 'part-of' or does it 'have-a'?

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 [Top] Rate this article
 
 About the author
 
Phil Curnow
Phil is a programmer with 15 years professional experience. He currently works for a Local Authority in the United Kingdom. His programming language of choice is C#, but over the years he has used many languages within his work. His web site and blog can be found at http://www.curnow.biz
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the top 5 tips for understanding .NET
Ricky Leeks presents the top 5 tips for understanding .NET Interoperability. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
Mindcracker MVP Summit 2012
Become a Sponsor
 Comments
Good Article by Mike On July 27, 2007
One thing you might want to mention is that composition is often referred to as "strong aggregation", where "weak aggregation" is the aggregation you described. All the relationships you described can be grouped under the general term of "associations"
Reply | Email | Modify 
Re: Good Article by Phil On July 28, 2007

Hi Mike,

Thanks for the feedback. Thouroughly agree with what you have said. Glad you enjoyed the article.

Reply | Email | Modify 
Typo by Deepak On July 28, 2007
The constructor of the Person class is mistyped as Address. Just an FYI...Good job on the article.
Reply | Email | Modify 
Re: Typo by Phil On July 29, 2007

Thanks for pointing that out. Until you mentioned that, I had not even noticed it, will correct the article.

Reply | Email | Modify 
thank you by zakir On September 23, 2009
nice explanation, helped me to clear my concept of composition and aggregation. but i think finding a good example of aggregation is difficult. and this is a weaker type of relationship than composition. I found one example of aggregation. in UK, different type of migrants live, one is british citizen, another british citzen with dual citizenship, temporary residence, indefinite residence. So if UK is destroyed, those citizen who have dual citizenship to other countries may still exist. In same way, temporary residence and indefinite residence can also exist with out UK, because they belong to other nations. I think this above scenario could be an example of aggregation relationship. What do you think? 
Reply | Email | Modify 
Aggregation Vs Composition by Basant On January 19, 2010
Nice Article, This clears the concept of Aggregation Vs Composition from implementation point of view.

Its like, if we are injecting one object (Address) into another object (Person) via some means, then it is definitely an Aggregation.

But when the object (Engine) is instantiated in the containg class (Car), its a Composition.
 
Reply | Email | Modify 
Can we consider a inner class like a composition ? by lli On June 24, 2010
Can we consider a inner class like a composition ? 

namespace MyCars
{
  public class Car
  {
    // Aggregation uses instances of objects created outside of
    // this class
    protected Door _frontRight;
    protected Door _frontLeft;
    protected Door _rearRight;
    protected Door _rearLeft;

    // inner classes used to create objects that are intrinsically
    // linked to the class Car
    protected class Engine
    {
      public int _horsePower;
    }

    protected class Battery
    {
      public int _voltage;
    }

    // Composition uses instances of objects that are created as
    // part of this object
    protected Engine _theEngine;
    protected Battery _theBattery;
  }

  public class Door
  {
    public int _position;
  }
}


namespace MyCars
{
  // Inherit from class Car
  public class FordCapri : Car
  {
    public FordCapri()
    {
      _theEngine._horsePower = 2000;
    }
  }
}

Reply | Email | Modify 
Great Article !!! Thanks a lot ! by aditya On February 24, 2011
I am a new to .NET and I use to get confused always since in basic C++ we always wrote something like this: Person p= new Person(); or sometimes int age=25; Person p = new Person(); So many times I used to get confused with why the hell most of the times we use Some other object in the constructor such as : Person p=new Person(25); Doctor D=new Doctor(p); <---------------- Here was my confusion. I knew the concept but they were not fairly clear. Today After reading this article I understood that its the part of Aggregation!!!!!!!!! And I also clearly understand that D is the CONTAINER object of P. So I think I should define Composition & Aggregation like this: Composition : Occurs when Container object manages the lifetime of Containing object. Both object gets disposed when Container's life time ends. Aggregation : Occurs when Container object DOES NOT manages the lifetime of Containing object. Containing object remains alive till its life time is ended although Containing object is not alive anymore. Silverlight007@sify.com Case study is here about ADO.NET: SqlConnection thisConnection = new SqlConnection(@"Server=(local)\sqlexpress;Integrated Security=True;" +"Database=northwind"); SqlDataAdapter thisAdapter = new SqlDataAdapter( "SELECT CustomerID, CompanyName FROM Customers", thisConnection); SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); Here Aggregation is like this : Connection HAS An adapter ; Adapter HAS A command builder. and both connection and adapter won't be disposed even if command builder is disposed :) Please help me improving the definition. Comments are most welcome. Regards, Aditya N Bokade
Reply | Email | Modify 
Useful information! by Muhammad On December 5, 2011
Well explained....Good job.
Reply | Email | Modify 
Team Foundation Server Hosting
 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.