მცირე მასალა დამწყები პროგრამისტებისთვის C# - ზე. ყველას კარგად მოგვეხსენება რამდენაც ძლევამოსილი ენაა C# ობიექტ ორიენტირებული სამყაროში. დღეს მინდა განვიხილო მისი ერთ - ერთი მეტად სასარგებლო ატრიბუტი რომელსაც ჰქვია
interface (ინტერფეისი).
რას წარმოადგენს ეს სუბიექტი და რა დანიშნულება აქვს მას? ეს სტანდარტული კითხვაა რომელი ოდესღაც უჩნდება ყველას ვინც კი კიდებს # - ს ხელს.
ინტერფეისი ეს არის მორიგი სინტაქსური კონსტუქცია, რომელიც ამარტივებს თქვენი Source Code - ის კოსნტრუქციას, ქმინს მას მეტად გასაგებს და ლოგიკურს. რათ გვინდა ეს ინტერფეისი და რაში გამოიყენება იგი საერთოდ? ამ კითხვაზე პასუხის გასაცემად დავსვათ მარტივი კითხვა, რომელიც ჩემის აზრით, ყველაფერს გახდის გასაგებს.
"როგორ უნდა გამოიყურებოდეს ჩემი კლასი?" ანუ ინტერფეისი პასუხისმგებელია არა კლასის რაიმე ფუნქციონალობაზე არამედ მის, ასე ვთქვათ, ვიზუალურ მხარეზე. ანუ ინტერფეისი არ განსაზღვრავს კლასის რამენაირ ფუნქციონალურ მხარეს, ის ასახას მის ვიზუალურ მხარეს. განვიხილოთ პატარა პრაქტიკული მაგალითი:
public interface ICellPhone
{
decimal Memory { set; get; }
void GetProperties();
}
ახლა რას ნიშნავს ეს ყველაფერი. სიტყვა
interface მიუთითებს იმაზე, რომ კლასი რომელიც რეალიზებას გაუკეთებს მოცემულ ინტერფეისს, აუცილებლობით შეიცავს
Memory თვისებას და
GetProperties() მეთოდს. მიაქციეთ ყურადღება იმ ფაქტს, რომ მე არ ვაკეთებ რამენაირი ინიციალიზაციას ან ფუნქციონალური ლოგიკას ჩვენს ინტერფეისში. მე მხოლოდ განვსაზღვრე ის მომენტი რომ ყოველ კლასს ვინც კი დაირთავს
ICellPhone-ს აუცილებლად ექნება მეთოდი
GetProperties() და ატრიბუტი
Memory.
ICellPhone ინტერფეისის
Memory თვისება როგორც წაკითხვისთვის ასევე ჩაწერისთვისაა განსაზღვრული, სურვილისამებრ შეიძლება მისი მხოლოდ კითხვის რეჟიმის დაყენება, რისთვისაც საკმარისია მხოლოდ getter - ის წაშლაა საჭირო. ამრიგად ჩვენ გვაქვს ინტერფეისი
ICellPhone, ახლა განვსაზღვროთ კლასი რომელიც გაუკეთებს რეალიზებას ამ ინტერფეისს.
public class IPhone : ICellPhone
{
public decimal Memory { set; get; }
public decimal Camera { set; get; }
public void GetProperties()
{
Console.WriteLine("Memory: " + this.Memory.ToString() + " GB, " +
"Camera: " + this.Camera.ToString() + " MP \n");
}
public void Call()
{
//code goes here
}
}
ამრიგად ჩვენ განვსაზღვრეთ კლასი
IPhone რომელიც რეალიზებას უკეთებს
ICellPhoneინტერფეისს. როგორც დავინახეთ
IPhone კლასს აუცილებლობით გააჩნია თვისება
Memory და მეთოდი
GetProperties(). ამ ორი წევრიდან რომლელიმეს არქონის შემთხვევაში, (მაგალითად
GetProperties()), კომპილაციისას მოხდებოდა შეცდომა: ConsoleApplication.IPhone does not implement interface member ConsoleApplication.CellPhone.
GetProperties() ერთ კლასს შეუძლია გაუკეთოს რეალიზება რამდენიმე ინტერფეისს (რაოდენობაში შეზღუდულები არ ვართ). განვიხილოთ შემდეგი ინტერფეისი:
public interface ILuxury
{
decimal Price { set; get; }
void GetProperties();
}
ILuxury ანუ „ფუფუნება“.
IPhone გარდა იმისა რომ მობილური ტელეფონია აგრეთვე ის შეიძლება ფუფუნებადაც ჩაითვალოს. იმისათვის რომ ჩვენი
IPhone გახდეს როგორც „მობილური ტელეფონი“ ასევე „ფუფუნება“ ჩვენ უნდა მოვიმოქმედოთ შემდეგი რამ:
public class IPhone : ICellPhone ,ILuxury
{
public decimal Memory { set; get; }
public decimal Camera { set; get; }
public decimal Price { set; get; }
void ICellPhone.GetProperties()
{
Console.WriteLine("Memory: " + this.Memory.ToString() + " GB, " +
"Camera: " + this.Camera.ToString() + " MP \n");
}
void ILuxury.GetProperties()
{
Console.WriteLine("Price: " + this.Memory.ToString() + " GEL\n");
}
public void GetProperties()
{
Console.WriteLine("Memory: " + this.Memory.ToString() + " GB, " +
"Camera: " + this.Camera.ToString() + " MP \n" +
"Price: " + this.Memory.ToString() + " GEL\n");
}
public void Call()
{
//code goes here
}
}
მიდნა მივიქციო თქვენი ყურადღება 2 ჩანაწერზე: „
void ICellPhone.
GetProperties()“ და „
void ILuxury.
GetProperties()“. როგორც ინტერფეისების განსაზღვრიდან ჩანს,
ICellPhone- სა
ILuxury - ს გააჩნია მეთოდი
GetProperties() და იმისთვის რომ გავიგოთ რომელი ინტერფეისის მეთოდი უნდა გამოიძახოს კლასმა თითოულ მეთოდოს წინ ეწერება თავისი ინტერფეისის სახელი. ასევე შეგვიძლია დავუმატოთ თავად
IPhone კლასის მეთოდი
GetProperties(). ვნახოთ ჩვენს მიერ აღწერილი კლასები და ინტერფეისები მუშაობაში:
static void Main(string[] args)
{
IPhone IP = new IPhone();
IP.Memory = 8; //მეხსიერება გიგაბაიტებში
IP.Camera = 2; //მეგაპიქსელი
IP.Price = 1500; //ფასი ეროვნულ ვალუტაში
(IP as ICellPhone).GetProperties();
(IP as ILuxury).GetProperties();
IP.GetProperties();
}
თავდაპირველად იქმნება
IPhone ტიპის ობიექტი. ხდება მისი თვისებების ინიციალიზაცია. იმისთვის რომ გამოვიძახოთ
ICellPhone ინტერფეისის
GetProperties() მეთოდი, ხდება IP ობიქტის წარმოდგენა
ICellPhone - ად და შესაბამისი მეთოდის გამოძახება. ანალოგიურად უნდა მოვიქცეთ
ILuxury ინტერფეისისთვისაც, ან ჩვეულებრივად ვიძახებთ
IPhone კლასის
GetProperties() მეთოდს. ყველა ქმედებამ წარმატებით ჩაიარა. გმადლობთ ყურადღებისათვის !!!