![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №2. Агрегация по значению и вложением.Содержание книги
Поиск на нашем сайте
Агрегация по значению.
![]() ![]()
![]() рис.2. Диаграмма классов: агрегация по значению.
Текст программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace lab2_AgregationAtt { class Program { class A { public A() { c.c1 = 40; } ~A() { }
public void mA() { Console.WriteLine("method of A"); }
public B bA { get { Console.Write("get b ->"); return b; } } public C cA { get { Console.Write("get c ->"); return c; } }
private B b = new B(); private C c = new C(); }
class B { public B() { } ~B() { } public void mB() { Console.WriteLine("method of B"); }
public D dA { get { Console.Write("get d ->"); return d; } }
private D d = new D();
}
class C { public C() { this.c1 = 15; } ~C() { }
public void mC() { Console.WriteLine("method of C"); }
public E eA { get { Console.Write("get e ->"); return e; } } public J jA { get { Console.Write("get j ->"); return j; } }
private E e = new E(); private J j = new J();
public int c1 { get; set; } }
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() { this.c1 = 20; } ~J() { } public void mJ() { Console.WriteLine("method of J"); }
public K kA { get { Console.Write("get k ->"); return k; } } private K k = new K(); public int c1 { get; set; } }
class K { public K() { } ~K() { } public void mK() { Console.WriteLine("method of K"); } }
static void Main(string[] args) { A a = new A(); //вкладываем в a a.mA(); a.bA.mB(); a.cA.mC();
//вкладываем в a -> b - > a.bA.dA.mD();
//вкладываем в a -> c - > e & a -> c ->f a.cA.eA.mE(); a.cA.jA.mJ();
a.cA.jA.kA.mK();
Console.ReadKey(); } } } Результат работы программы: Вывод: при агрегации по значению все объекты класса существуют внутри объявленного класса. При таком виде агрегации невозможно удалить объекты, являющиеся частью объекта первого по иерархии класса. Например, b, c, j, k — части объекта а класса А(первый класс по иерархии); эти части создаются только при вызове конструктора класса A, а уничтожаются — при вызове деструктора А.
Агрегация вложением. Текст программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace lab2_AgregationVal { class Program { class A { public A() { c.c1 = 5; } ~A() { }
public class B { public B() { } ~B() { }
public class D { public D() { } ~D() { } public void mD() { Console.WriteLine(" method of D"); } }
public void mB() { Console.WriteLine(" method of B"); } public D dA { get { Console.Write("get d -> "); return d; } }
private D d = new D(); }
public class C { public C() { this.c1 = 10; } ~C() { } public class E { public E() { } ~E() { } public void mE() { Console.WriteLine(" method of E"); } }
public class F { public F() { } ~F() { } public void mF() { Console.WriteLine(" method of F"); } }
public void mC() { Console.WriteLine(" method of C"); } public E eA { get { Console.Write("get e ->"); return e; } } public F fA { get { Console.Write("get f ->"); return f; } }
private E e = new E(); private F f = new F();
public int c1 { set; get; } }
public class J { public J() { } ~J() { } public void mJ() { Console.WriteLine(" method of J"); } }
public class K { public K() { } ~K() { } public void mK() { Console.WriteLine(" method of K"); } } public void mA() { Console.WriteLine(" method of A"); }
public B bA { get { Console.Write("get b ->"); return b; } } public C cA { get { Console.Write("get c ->"); return c; } } public J jA { get { Console.Write("get j ->"); return j; } } public K kA { get { Console.Write("get k ->"); return k; } }
private B b = new B(); private C c = new C(); private J j = new J(); private K k = new K();
} static void Main(string[] args) { //Создаем объект класса-родителя A A a = new A();
//Проводим агрегацию по значению a.mA(); //агрегируем в A: B, C, J, K a.bA.mB(); a.cA.mC(); a.jA.mJ(); a.kA.mK();
//агрегируем в B: D a.bA.dA.mD();
//агрегируем в C: E, F a.cA.eA.mE();
a.cA.fA.mF();
Console.ReadKey(); } } } Результат работы программы: Вывод: при агрегации вложением определение классов происходит внутри классов, стоящих выше по иерархии. Все объекты создаваемого класса существуют внутри него самого. Как и в случае агрегации по значению уничтожение объектов, невозможно без уничтожения класса, стоящего выше по иерархии. Агрегация по ссылке намного лучше агрегации по значению или вложению, так как агрегация по ссылке расходует меньше памяти.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 332; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.246.245 (0.007 с.) |