تکنیک برنامه نویسی POOV

پنجشنبه 9 دی 1395

در این مقاله قصد داریم شما را با تکنولوژی جدیدی با نام اختصاری POOV که با زبان های برنامه نویسی شی گرا (object-oriented) کار میکند آشنا کنیم.

تکنیک برنامه نویسی POOV

POOV چیست ؟

POOV یک تکنیک برنامه نویسی برای زبان های  object-oriented داست که توسط شرکت  MIRA Software Factory توسعه داده شده است.

• راه حلی بر کمک کردن به نوشتن کد نرم افزار است

• به کد ها ثبات بیشتر میدهد و نگهداری کدها را ساده تر میکند.

• به طور موثر با مهلت داده شده و هزینه ها مطابقت دارد.

• شکست ها و خطاها را کاهش میدهد.

 کمک کردن به نوشتن کد نرم افزار :

مشکل مهم در استفاده از  زبان های  object-oriented این است که شما نمیتوانید پتانسیل کامل خود را دریافت کنید به این دلیل که اکثر پایگاه داده ها به صورت رابطه ای استفاده میشوند، که با روش شی گرا متفاوت است.

POOV تلاش میکند که تمام پتانسیل را از OOP  بگیرد و امکان ذخیره سازی شی های ایستا را در پایگاه داده اضافه کند.

از این رو OOP  باید یک قسمت کوچک ایجاد کند و برنامه نویسان را در "Linking" شی ها با دادن نتیجه POOV راهنمایی کند.

در OOP چه اتفاقی هایی می افتد؟

• ساخت مدل در UML دشوار است 

• معمولا در آخر کد با مدل متناسب نیستند.

• کلاس های end up متدهای مختلفی دارند که آنها اشاره شده اند به این مدل

• منطق ، تعریفات و عملکرد متد ها تا حد زیادی به سبک برنامه نویس بستگی دارد

• در این حالت ذخیره حالت شی ها در پایگاه داده رابطه ای برای مدیریت داده ها پیچیده تر است.

• کسب کاری با قوانین مشابه ممکن است که کلاس های متفاوتی داشته باشد.

با POOVچه اتفاقی هایی می افتد؟

• مدل کردن جزییات با استفاده از UML آسان میشود.

• کد ها تولید میشوند و به مدل ما attach میشوند. 

• ساختار کد کاملا حرفه ای است.

• منطق ، تعریفات و عملکرد متد ها از پیش تعریف شده است و به تجزیه و تحلیل پایبند است.

• حال شی ها کاملا  سازگار با نگه داشتن در پایگاه داده رابطه ای است.

• صاحبان قوانین کسب و کار به وضوح مشخص شده است.

• کد ها صرف نظر از سبک برنامه نویس ها تولید میشوند.

پیشنهاد POOV به تمرکز کد به: 

- در حفظ تداوم اشیاء و بازیابی آنها.

- تخصص در نوع لینک ها ،قوانین و رفتارها است.

- حفظ ساختار تخصصی به تهیه این ویژگی ها.

برای این POOV دو اینتر فیس (interface) تخصصی دارد :

1- یک interfaces که قابلیت عملکرد به خود را فراهم میکند. (Base Interface)

2- یک interfaces که عملکرد دیگر نوع های اشیا را فراهم میکند.

1.- ماندگاری (PERSISTENCE)

همه ی اشیا در یک سیستم باید مطمئن باشند که ماندگاری و قدرت بازیابی را دارا هستند.

برای این موضوع POOV یک Interface برای همه ی کلاس ها تولید کرده است.

base interface ماندگاری تمامی کلاس ها و متد هایی که چندین ویژگی دارند را مدیریت میکند.

• نگاشت (Mapping) ویژگی ها هستند :

ID و IsDetached و PersistentState و Accepted و Hash و Schema.

• سازنده متد ها :

 NewObject و NewObject و Clone و Reset و Refresh و Restore وbuilders ها و از بین برنده های کلاس ها 

• متد های بروز رسان کننده :

 Add و Update و Delete و AcceptChanges و RejectChanges و ValidateAdd و ValidateUpdate  و ValidateDelete.

• متد های انتخاب گر : 

Select و FreeSelect و Find  و Exist

• متد های انتقال دهنده :

 Get و Set و Notify و Quiet  و ToString.

• متد های مقایسه کننده :

 Equals و Same  و CompareTo.

 این base interface برای امن بودن و مدیریت پایداری هر شیی از هر نوع کافی است.

این interface را (CCB (Control Class Base مینامند.

هدف از CCB  استاندارد سازی مدیریت ماندگاری ها است.

برای مثال شی یک وام ، فاکتور و یا کلاس محصولات ماندگاری شان به یک روش اداره میشود.

مثال :

وام جدید :

NewLoan = Loan.NewObject();
NewLoan.Account = 5803;
NewLoan.Bank = “National”;
NewLoan.Amount = 15000;
NewLoan.Add();
NewLoan.AcceptChanges();

تغییر وام :

MyLoan = Loan.Find(5803);
MyLoan.Payment = 1000;
MyLoan.Update();
MyLoan.AcceptChanges();

جستجو وام :

MyLoans[] = Loan.Select(“National”);

فاکتور جدید :

NewInvoice = Invoice.NewObject();
NewInvoice.Number = 5803;
NewInvoice.Customer = “ABC Store”;
NewInvoice.Amount = 376.25;
NewInvoice.Add();
NewInvoice.AcceptChanges();

تغییر فاکتور :

MyInvoice = Invoice.Find(5803);
MyInvoice.Payment = 150;
MyInvoice.Update();
MyInvoice.AcceptChanges();

جستجو فاکتور :

CustInvoices [] = Invoice.Select(“ABC Store”);

محصول جدید :

NewProduct = Product.NewObject();
NewProduct.Code = “RD-671”;
NewProduct.Name = “Solar Panel 260 Watts”;
NewProduct.Price = 280;
NewProduct.Add();
NewProduct.AcceptChanges();

تغییر محصول :

MyProduct = Product.Find(“RD-671”);
MyProduct.Price = 259.99;
MyProduct.Update();
MyProduct.AcceptChanges();

جستجو محصول :

ListProducts[] = Product.Select();

همه ی محصولات به ایجاد ، بروزرسانی، جستجو و حذف نیاز دارند.

CCB این امکان رامیتواند به صورت عملکردی استاندارد در اختیار شما قرار دهد.

2- لینک ها (Links)

در POOV 10 نوع مختلف از لینک وجود دارد که بسته به کارایی آنها به سه گروه تقسیم شده اند.

1- Qualifier (توصیف کننده) ها : 

توصیف کننده کننده ساده(CS) ، توصیف کننده ترکیبی(CC) ، توصیف کننده مستقل(CI)

2- Relation (رابطه)ها :

رابطه ساده(RS) ، رابطه ترکیبی(RC) ، رابطه قدیمی (Historic )(RH) ، رابطه پیچ (Involution) (RI)

3-Join (اتصال)ها :

اتصال ساده(JS) ، اتصال منحصر به فرد توصیف شده (JU)،چند اتصال توصیف شده(JM)

مدیریت Linked Interface ارتباط اشیاء  از دو کلاس در یک وابستگی پدر_فرزند ( Parent-Child ) دارای دو قسمت است. یک قسمت برای (Parent (P و قسمت دیگر برای (child(H میباشد.

تابع لینک Parenrt) P) عبارت است از :

• Link و Contain و Remove و Replace و LinkedClassName و ValidateLink و  ValidateRemove.

• Update و AcceptChanges و RejectChanges .

تابع لینک Child) H) عبارت است از :

• NewObject و Find و Exist و Select .

• Compute و Avg و Count و Max و Min و Sum .

قسمتی از این تابع ها ، اینترفیس  H Link شامل ویژگی هایی از شی Parent است.

مثالی از نوع لینک RC)  Composition Ratio).

لینک RC شامل دو قسمت است ، یک قسمت RCP  که باید به parent عملکرد (functionality ) بدهد و RCH  که باید این کار را برای child باید انجام دهد.

هدف Linked Interface ها مدیریت استاندارد رابطه ی بین کلاس ها است.

برای مثال ، یک لینک بین ورودی خروجی و کلاس کاردکس یا بین آیتم و فاکتور و یا بین فاکتور و پرداخت است ،که به روش یکسان اداره میشوند.

مثال :

فروش جدید :

MyKardex = Kardex.Find(“RD-671”);


OutSale = InputOutput.NewObject();
OutSale.Quantity= 3;
OutSale.IO = “Output”;

MyKardex.Link(OutSale);
MyKardex.Update();
MyKardex.AcceptChanges();

جزییات کاردکس :

IOs[] = MyKardex.LinkedInputOutput ();

آیتم جدید فاکتور :

MyInvoice = Invoice.Find(5803);


NewItem = InvoiceItem.NewObject();
NewItem.Cant = 3;
NewItem.Product = “Solar Panel 260 Watts”;

MyInvoice.Link(NewItem);
MyInvoice.Update();
MyInvoice.AcceptChanges();

جزییات فاکتور :

InvoiceDetail[] = MyInvoice.LinkedInvoiceItem();

پرداخت فاکتور جدید :

MyInvoice = Invoice.Find(5803);

NewPay = Payments.NewObject();
NewPay.Amount = 75.80;
NewPay.Date = “11/06/2015”;

MyInvoice.Link(NewPay);
MyInvoice.Update();
MyInvoice.AcceptChanges();

Invoice detail:

InvoicePays[] = MyInvoice.LinkedPayments();

همه ی لینک ها نیازمند join, removed, replaced هستند

Linked Interface اینترفیس ها را به  شیوه ای استاندارد فراهم می کند.

برنامه نویسی آسان :

• POOV در حال حاضر تعداد زیادی ویژگی و متد دارد و روش خوبی در عملکرد آن تعریف شده است ، و  بیش تر از آن مورد نیاز نیست.

• POOV همچنین دارای منطقه و زیر مناطق به خوی تعریف شده ی  تخصصی ساختار کد است  .

•  اجازه ساختار کد های استاندارد با قابلیت استفاده مجدد را میدهد.

یک Snippet  قسمتی از کد است که میتواند بار ها مورد استفاده قرار بگیرد.

POOV استفاده از قطعه کدهایی با قابلیت استفاده مجدد که میتوانند تولید راه حل بر مبنای join  تیکه ای از کد قبلا استفاده شده باشند، را ترویج میدهد.

مدل POOV و هر لینک و قطعه  به ما عملکردی مشخص را ارئه میدهند.

پس ، کلاس کلاینت (Customer) باید با یک CCB Snippe رمزی بشود(encode ) که به آن 3 ویژگی از Str اسنیپت ها CCH Snippet, another CSP و RSP Snippet اضافه بشود.

برای مثال ، برای رمزگذاری ارتباط بین Factura (فاکتور) و در Partida (آیتم) آن را : 

1- Snippet CCB برای ساخت کلاس فاکتور استفاده میشود.

2- Snippet  ویژگی ها (dateTime , int , Curr , Strو غیره) برای اضافه کردن ویژگی ها به فاکتور  استفاده میشود

3-  مراحل 1 و 2 برای رمزگذاری آیتم ها دوباره تکرار میشوند.

4- در منطقه لینک ها ( Links Region) ی کلاس فاکتور  RCP Snippet را با کلاس آیتم لینک کنید.

5-در منطقه لینک ها ( Links Region) ی کلاس آیتم RCHSnippet را با کلاس فاکتور لینک کنید.

مثالی از یک  Snippet ویژگی string در #C برای Visual Studio :

/// <summary>
/// Obtiene o establece $Descripcion$
/// </summary>
    public string $PropertyName$
    {
        get
        {
            if (this.cObj.IsNull["$MPName$"])
            { return string.Empty; }
            else
            { return (string)this.cObj["$MPName$"]; }
        }
        set
        {
            // if (value.Equals(string.Empty)) throw new Exception("El valor de $PropertyName$ no puede ser cadena nula.");
            if (value.Length > $Length$) { throw new Exception("$PropertyName$ debe tener un m&aacute;ximo de $Length$ caracteres."); }
            this.cObj["$MPName$"] = value;
        }

        // ToDo Copie y cotre la siguiente l&iacute;nea y p&eacute;guela la regi&oacute;n "Propiedades" del m&eacute;todo Initializes.
        lTpObj.Add(MIRA.Data.Property.NewObject(lTpObj, "$MPName$", "$FieldName$", typeof(System.String), $Length$));

        // ToDo Copie y cotre la siguiente linea y p&eacute;guela en la Interfaz de la clase.
        string $PropertyName$ { get; set; }

        // ToDo Copie y cotre la siguiente linea y p&eacute;guela en el m&eacute;todo Get.
        pData.$PropertyName$ = this.$PropertyName$;

        // ToDo Copie y cotre la siguiente linea y p&eacute;guela en el m&eacute;todo Set.
        this.$PropertyName$ = pData.$PropertyName$;

    }

با تولید کد POOV  ، قطعه ها (Snippet) با هم متصل میشوند.

سهولت نگهداری :

Poov داری طراحی خوب است و به ناحیه ها و زیر ناحیه ها تقسیم شده است. و هر گونه تغییر، بهبود و یا نقص به طور کامل قابل  کنترل است.

مهلت و مقرون به صرفه بودن :

کد تولید شده توسط Poov و قطعه ها و مدل ها به خوبی اندازه گیری شده و بهینه هستند.

• پشتیبانی زمان 

• هزینه ها 

• پردازش 

• تغییرات

کاهش شکست ها و خطرات :

با استفاده از Snippet ثابت ریسک های شکست ها در کد کاهش پیدا میکند .

POOV خطرات ناشی از اشتباهات و سوء تفاهم ها را  کاهش می دهددر نتیجه تولید برنامه های کاربردی با این روش موثرتر است

POOV به برنامه نویسان کمک میکند تا کد بهتری را بنویسند.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 12 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید