Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №1. Агрегация по ссылке

Поиск

Protected
Protectedd
Protectedd
Protectedd
Protectedd
Protectedd
Protectedd
Private
Private
Private
Private
Private
Private
Private
Public
Public
Public
Public
Public
Public
Public

Рис.1. диаграмма классов: агрегация по ссылке.

Текст программы

using System;

using System.Collections.Generic;

using System.Linq;

 

using System.Text;

using System.Threading.Tasks;

 

namespace lab1_AgregationLink

{

class Program

{

   class A

   {

       public A(B b, C c)

       {

           this.b = b;

           this.c = c;

 

           c.cq = 24;

       }

       ~A() { }

 

       public void mA()

       {

           Console.WriteLine("method of A");

       }

 

       public B bA

       {

           set { Console.WriteLine("set b"); b = value; }

           get { Console.Write("get b ->"); return b; }

       }

       public C cA //возвращает ссылку на обьект С, у которого вызывается метод сА - атрибут доступа

       {

           set { Console.WriteLine("set c"); c = value; }

           get { Console.Write("get c ->"); return c; }

       }

 

       private B b = null;

       private C c = null;

   }

 

   class B

   {

       public B(D d)

       {

           this.d = d;

       }

       ~B() { }

       public void mB()

       {

           Console.WriteLine("mthod of B");

       }

       public D dA

       {

           set { Console.WriteLine("set d"); d = value; }

           get { Console.Write("get d ->"); return d; }

       }

 

       private D d = null;

   }

 

   class C

   {

       public C(E e, J j)

       {

           this.e = e;

           this.j = j;

       }

       ~C() { }

 

       public void mC()

       {

           Console.WriteLine("method of C");

       }

 

       public E eA

       {

           set { Console.WriteLine("set e"); e = value; }

           get { Console.Write("get e ->"); return e; }

       }

 

       public J jA

       {

           set { Console.WriteLine("set j"); j = value; }

           get { Console.Write("get j ->"); return j; }

       }

 

       //атрибут доступа

       public int cq { get; set; }

 

       private E e = null;

       private J j = null;

   }

 

   class D

   {

       public D() { }

       ~D() { }

       public void mD()

       {

           Console.WriteLine("Method of D");

       }

   }

 

   class E

   {

       public E() { }

       ~E() { }

       public void mE()

       {

           Console.WriteLine("Method of E");

       }

   }

 

   class J

   {

       public J(K k)

       {

           this.k = k;

       }

       ~J() { }

       public void mJ()

       {

           Console.WriteLine("Method of J");

       }

       public K kA

       {

           set { Console.WriteLine("set k"); k = value; }

           get { Console.Write("get k ->"); return k; }

       }

       private K k = null;

   }

 

   class K

   {

       public K() { }

       ~K() { }

       public void mK()

       {

           Console.WriteLine("Method of K");

       }

   }

   static void Main(string[] args)

   {

       //создание объектов, которые будут частью других объектов

       D d = new D();

       E e = new E();

       K k = new K();

 

       //передаем выше созданные объекты классов в виде параметра в конструкторы классов B, C и A.

       B b = new B(d);

       J j = new J(k);

       C c = new C(e, j);

       A a = new A(b, c);

 

 

       //печать атрибута доступа

       Console.WriteLine("печать атрибута доступа:");

       Console.WriteLine(c.cq);

 

       //проверка, что передаётся по ссылке

       Console.WriteLine("передача по ссылке:");

       a.mA();

       a.bA.mB();

       a.cA.mC();

 

       a.bA.dA.mD();

 

       a.cA.eA.mE();

       a.cA.jA.mJ();

 

       a.cA.jA.kA.mK();

 

        Console.ReadKey();

   }

}

}       

Результат работы программы:

Вывод: Объекты всех классов существуют независимо друг от друга. Связывание объектов происходит с помощью конструктора.Например, b, c — параметры для конструктора класса A; d — для конструктора класса B; e, f — для конструктора класса C. Объекты могут быть уничтожены по отдельности. Это нарушит целостность структуры. Если удалить объект a, объекты b, c и т.д будут продолжать существовать и дальше. Агрегация по ссылке очень выгодна, так как она расходует очень мало памяти.



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 132; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.166.193 (0.009 с.)