UML — Unified Modeling Language — дастурий маъсулотларни махсуслаштириш, визуаллаштириш, қуриш ва ҳужжатлаштириш тили ҳисобланади, шунингдек, бизнес-моделлаштириш хамда дастурий бўлм аган бошқа тизимларни моделлаштиришда хам кенрг қўлланилади.
UML дастурлаш тили системаларни ифодалашнинг турли аспектларини тавсифлашга (масалан, ташқи фойдаланувчилар нуқтаи-назаридан систпеманинг ҳулқларини белгилашга) имкон беради. Синфлар ўртасидаги ўзаро муносабатлар синфлар диаграммасини ўз аксини топган.
Синфлар диаграммасида ворислик муносабатлари базавий синф (аждод) томонга йўналган бўялмаган учбурчак шаклида тасвирланган (14.2.1-расм)
21.2.1-расм. Ворислик учун UML диаграммалари
Синфларнинг бир-бирининг ичига кириши қисм эгасига қараб йўналган ромблар шаклида тасвирланган. Чизиқнинг иккинчи учида ички қисмлар миқдорини кўрсатувчи рақамлар ёки юлдузчалар (агар қисмлар сони иҳтиёрий бўлса) келтирилган (21.2.2-расм).
21.2.2-расм. Ички синфлар учун диаграммага намуна.
Клпассларни лойиҳалашда синфлар ўртасидаги муносабатларни иложи борича тўлароқ акс эттирадиган моделн танлаган маъқул.
.NET объектларининг барча шажаралари учун асосий бўлган System.Object ўзак синфи барча ворисларни бир нечта муҳим методлар билан таъминлайди. Ҳосила синфлар бу методлардан бевосита фойдаланриши ёки қайта аниқлаши мумкин.
Кўпинча object синфи умумийликни таъминлаш учун параметрларнинг типларини тавсфилашда фойдаланилади, шунингдек турли типдаги ҳаволаларни сақлашда хам қўлланрилади. Шундай қилиб, полиморфизм приципи амалга оширилади.
System.Object нинг очиқ методлари қуйида келтирилади.
Битта параметрли Equals методи агар параметр хамда объектни чақирувчи хотиранинг битта соҳасига мурожаат қилаётган бўлса true қийматини қайтаради. Уни умумий кўринишда қуйидагича ёзиш мумкин:
public virtual bool Equals(object obj);
Иккита параметрли Equals методи агар хар икки параметр хотиранинг битта соҳасига мурожаат қилаётган бўлса true қийматини қайтаради. Уни умумий кўринишда қуйидагича ёзиш мумкин:
public static bool Equals(object ob1, object ob2);
GetHashCode методи объектнинг хэш-кодини шакллантиради ва объектни бир қийматли таниш учун сонли қиймат қайтаради. Бу сондан турли тузилма ва алгоритмлар кутубхонасида фойдаланилади. Агар Equals методи қайта аниқланаётган бўлса, у холда GetHashCode методини қайта юклаш зарур. Метод қуйидагича ёзилади:
public virtual int GetHashCode();
GetType методи объектнинг жорий полиморф типини (ҳаволаларнинг типи эмас, балки жорий вақтда ҳавола кўрсатаётган объектнинг типини) қайтаради. Қайтарилаётган типи - Type. Шажаранинг бу абстракт базавий синфи дастурнинг бажарилиш вақтидаги тип ҳақида маълумот олиш учун қўлланади. Умумий ёзилиши қуйидагича:
public Type GetType();
ReferenceEquals методи агар хар икки параметр хотиранинг битта қисмига ҳавола қилаётган бўлса true қийматини қайтаради. Методнинг умумий ёзилиши қуйидагича::
public static bool ReferenceEquals(object ob1, object ob2);
ToString методи ҳавола типлар учун тўғридан – тўғри синфнинг тўлиқ номини сатр кўринишида, сонли қийматлар учун эса сатрга айлантирилган қийматини қайтаради. Бу объектнинг холати ҳақидаги маълумотни экранга чиқариш учун метод қайта аниқланади. Методнинг умумий ёзилиши қуйидагича :
public virtual string ToString()
Ҳосила объектларда кўпинча бу методларни қайта аниқланади. Масалан, Equals методини объектларни таққослашнинг ҳусусий критерияларини ўрнатиш учун қайта аниқлаш мумкин.
Monster синфи учун object синфи методларини қайта аниқлаш учун намуна 21.2.5-листингда келтирилган.
using System;
namespace ConsoleApplication1
{
class Monster
{
public Monster( int health, int ammo, string name )
{
this.health = health;
this.ammo = ammo;
this.name = name;
}
public override bool Equals( object obj )
{
if ( obj == null || GetType() != obj.GetType() ) return false;
Monster temp = (Monster) obj;
return health == temp.health &&
ammo == temp.ammo &&
name == temp.name;
}
public override int GetHashCode()
{
return name.GetHashCode();
}
public override string ToString()
{
return string.Format( "Monster {0} \t health = {1} ammo = {2}",
name, health, ammo );
}
string name;
int health, ammo;
}
class Class1
{ static void Main()
{
Monster X = new Monster( 80, 80, "Вася" );
Monster Y = new Monster( 80, 80, "Вася" );
Monster Z = X;
if ( X == Y ) Console.WriteLine(" X == Y ");
else Console.WriteLine(" X != Y ");
if ( X == Z ) Console.WriteLine(" X == Z ");
else Console.WriteLine(" X != Z ");
if ( X.Equals(Y) ) Console.WriteLine( " X Equals Y " );
else Console.WriteLine( " X not Equals Y " );
Console.WriteLine(X.GetType());
}
}
}
21.2.5-листинг. Object синфи методларини қайта аниқлаш
Дастурнинг натижаси қуйидагича:
X != Y
X == Z
X Equals Y
ConsoleApplication1.Monster
Дастурнинг иши натижаларини таҳлил қилар эканмиз, кўриш мумкинки, тенгликка таққослаш амалларида ҳаволалар таққосланади, қайта юкланган Equals методида эса - қийматлар.
Do'stlaringiz bilan baham: |