Алматы экономика және статистика академиясы



Pdf көрінісі
бет7/11
Дата07.04.2017
өлшемі1,49 Mb.
#11217
1   2   3   4   5   6   7   8   9   10   11

 

Абстрактілі кластар 

 

 



Абстрактілі  класс  тек  ұрпақтарды  тудыру  үшін  қолданылады.  Әдетте  онда 

ұрпақтардың  әрқайсысы  өзінің  қолданатын  жолымен  жүзеге  асыратын  тәсілдер  жиыны 

беріледі.  Абстрактілі  кластар  туынды  кластарда  нақтылануы  жоспарланатын  жалпы 

ұғымдарды бейнелеуге арналған. 

 

Абстрактілі  класс  иерархия  үшін  толықтай  интерфейсті  анықтайды  және  бұл 



кезде  класс  тәсілдеріне  ешбір  нақты  әрекеттер  сәйкес  келмеуі  мүмкін.  Бұл  жағдайда 

тәсілдердің тұлғасы бос болады және олар abstract спецификациясымен жарияланады. 

 

Егер класта кем дегенде бір абстрактілі тәсіл бар болса, класс түгелдей абстрактілі 



класс ретінде (abstract спецификаторымен) сипатталуы тиіс. 

 



Абстрактілі кластың құрамында толықтай анықталған тәсілдер де болуы мүмкін, 

бұл оның интерфейстен айырмашылығы.  



 

Полиморфты тәсілдер 

 

 



Абстрактілі кластар келесі жағдайларда қолданылады: 

 



бір  иерархияның  объектілерін  сақтауға  арналған  мәліметтер  құрылымдарымен 

жұмыс істеу кезінде 

 

тәсілдердің параметрлері ретінде.  



 

Егер  абстрактілі  кластан  туындаған  класс  барлық  абстрактілі  тәсілдерді  қайта 



анықтайтын болмаса, ол да абстрактілі класс ретінде сипатталуы тиіс.  

 



Параметрі  абстрактілі  класс  болатындай  тәсіл  құруға  мүмкіндігі  бар. 

Программаның  орындалуы  барысында  бұл  параметрдің  орнына  кез  келген  туынды 

кластың  объектісі  берілуі  мүмкін.  Бұл  бір  иерархия  шеңберіндегі  кез  келген  типті 

объектімен жұмыс істейтін полиморфты тәсілдерді құруға мүмкіндік береді.  



51 

 

 



Жүзеге асырылған тәсілге интерфейс типті объект арқылы қатынас құру 

 

 



Бұл жолдың ыңғайлылығы IAction типті объектілерге осы интерфейсті қолдайтын 

әртүрлі класс объектілеріне сілтемені меншіктеу кезінде байқалады.  

 

Мысалы, интерфейс типті параметрі бар тәсіл бар болсын. Бұл параметрдің орнына 



интерфейсті жүзеге асыратын кез келген объектіні беруге болады: 

static void Act( IAction A ) 

     A.Draw(); 



static void Main() 

    Monster Vasia = new Monste



r( 50, 50, "Вася" ); 

    Act( Vasia ); 

    ... 

 



Интерфейстер және мұралау 

 

 



Интерфейстің ата-тегі болмауы мүмкін немесе олардың саны бірнешеу болуы да 

мүмкін, соңғы жағдайда ол ең жоғарғы деңгейден бастап, өзінің барлық базалық 

интерфейстерінің барлық элементтерін мұралайды.    

 



Базалық интерфейстерге олардың ұрпақтарынан кем болмайтындай деңгейде қол 

жеткізілетін болуы тиіс.  

 

Әдеттегі кластар иерархиясы  сияқты, базалық интер-фейстер жалпылама әрекеттер 



сипатын анықтайды, ал олардың ұрпақтары оны нақтылайды және толықтырады.   

 



Сонымен қатар, ұрпақтар интерфейсінде сигнатурасы бірдей, мұраланған 

элементтерді қайта анықтаушы элементтерді көрсетуге болады. Мұндайда 

элементтің алдына кластардағы сияқты new түйінді сөзі жазылады. Осы сөздің 

көмегімен базалық интерфейстің соларға сәйкес элементі жасырылады.  



 

Мысал 

 

interface IBase  {  void F( int i );  }   

interface Ileft : IBase {   

   


new void F( int i );               /* F тәсілін қайта анықтау */   }   

interface Iright : IBase  {   void G();  }   

interface Iderived : ILeft, IRight {}   

class A  {   

   void Test( IDerived d ) {   

      


d.F( 1 );                          // ILeft.F шақырылады  

      


((IBase)d).F( 1 );             // IBase.F шақырылады 

      


((ILeft)d).F( 1 );              // ILeft.F шақырылады 

      


((IRight)d).F( 1 );            // IBase.F шақырылады 

   }   


}   

IDerived — IRight — 

IBase тізбегінде қайта анықталмағанына қарамастан, IBase 

интерфейсінің  F  тәсілі  ILeft  интерфейсімен  жасырылған.  

 

Интерфейстерді жүзеге асырудың ерекшеліктері 

 


52 

 



 

Интерфейсті жүзеге асыратын класс оның барлық элементтерін, оның ішінде, 

мұраланғандарын да анықтауы керек. Егер осындай жағдайда интерфейстің аты 

нақты түрде көрсетілетін болса, ол осыған сәйкес элемент сипатталған интерфейске 

сілтеме жасауы тиіс.  

 



Өзіндік немесе мұраланған элементтерге нақты сілтеме жасайтын интерфейс класс 

ата-тектері тізімінде көрсетілуі тиіс. 

 

Класс өзінің ата тегінің барлық тәсілдерін, оның ішінде, интерфейстерді жүзеге 



асырғандарын да мұралайды. Ол осы тәсілдерді new спецификаторының көмегімен 

қайта анықтай алады, алайда олармен тек класс объектісі арқылы ғана қатынас 

құруға болады. 

 

Стандартты .NET интерфейстері 



 

 



.NET кластар кітаханасында объектілердің қажетті әрекет-терін тағайындайтын 

көптеген стандартты интерфейстер анықталған. Мысалы, IComparable интерфейсі 

объекті-лерді «үлкен-кіші» деген сияқты салыстыру тәсілін тағайындайды, бұл 

оларды реттеуге мүмкіндік береді.   

 

IEnumerable 



және IEnumerator интерфейстерін жүзеге асыру foreach көмегімен 

объект құрамын көруге, ал ICloneable интерфейсін жүзеге асыру объектілерді 

клондауға мүмкіндік береді.  

 



Стандартты интерфейстерді кітапхананың көптеген стандартты кластары 

сүйемелдейді. Мысалы, foreach көмегімен жиыммен жұмыс істеу мүмкіндігінің 

болу себебі – Array типі IEnumerable және IEnumerator интерфейс-терін жүзеге 

асырады.   

 

Стандартты интерфейстерді сүйемелдейтін өз кластары-мызды да құруға болады, 



бұл осы кластар объектілерін стандартты тәсілдер көмегімен пайдалануға 

мүмкіндік береді.  

 

Объектілерді салыстыру 

 

 



IComparable 

интерфейсі System атаулар кеңістігінде анықталған. Оның 

құрамында тек бір ғана CompareTo тәсілі бар, ол екі объектіні – ағымдағы және 

оған параметр ретінде берілген объектілерді салыстыру нәтижесін қайтарады.  

interface IComparable 

    int CompareTo( object obj ) 



 



Тәсіл төмендегідей нәтижелерді қайтаруы тиіс: 

 



0, егер ағымдағы объект пен параметр тең болса

 



теріс сан, егер ағымдағы объект параметрден кіші болса; 

 



оң сан, егер ағымдағы объект параметрден үлкен болса. 

 

Программалау үшін берілетін ұсыныстар 

 

Мұралаудың негізгі артықшылығы – базалық класс деңгейінде туынды класс 



объектілерімен де жұмыс істеуге мүмкіндік беретін универсалды код жазуға 

болады, бұл виртуалды тәсілдер көмегімен жүзеге асырылады.  

 

Виртуалды тәсілдер ретінде иерархияның барлық кластарында бір функцияны 



(мүмкін әртүрлі тәсілдермен) атқаратын тәсілдер сипатталуы тиіс.   

 



Туынды кластарда нақтылануы жоспарланатын жалпы ұғымдарды бейнелеу үшін 

абстрактілі кластар қолданылады. Әдетте абстрактілі класта ұрпақтардың 

әрқайсысы өзінің қолданатын жолымен жүзеге асыратын тәсілдер жиыны, яғни 

интерфейс беріледі. 



53 

 



 

Жай тәсілдерді (виртуалды емес) туынды класта қайта анықтау ұсынылмайды. 

 

12-13-

шілекция. Интерфейстер. Контейнерлік кластар 

 

 



интерфейстерді сипаттау және қолдану; 

 



объектілерді клондау, салыстыру, реттеу үшін стандартты .NET; 

интерфейстерін қолдану; 

 



контейнер (коллекция) түсінігі; 

 



стандартты .NET топтамаларын (коллекция) қолдану. 

 

Интерфейстер. Интерфейс туралы жалпы мағлұматтар 

 

 



интерфейс кластардың арнайы бір түрі, ол абстрактілі кластың «шеткі бір түрі 

(жағдайы)» болып табылады. Интерфейсте туынды класта жүзеге асырылуы тиіс 

абстрактілі тәсілдер, қасиеттер және индексаторлардың жиыны беріледі.  

 



интерфейс оны іске асыратын кластар қолдайтын әрекет-терді анықтайды.  

 



интерфейсті қолданудың негізгі идеясы – осындай класс объектілерін бірдей 

жолдармен қолдануға мүмкіндік беру.  

 

әрбір класс интерфейс элементтерін өз қалауынша анық-тай алады. Осылайша 



полиморфизмге қол жеткізіледі: әртүрлі класс объектілері бір тәсілдің шақыруына 

әртүрлі жауап әрекеттер орындай алады. 

 

интерфейс синтаксисі класс синтаксисіне ұқсас: 



 

[ атрибуттар ] [ спецификаторлар ] interface аты [ : ата_тегі ] 



 

интерфейс_тұлғасы [ ; ] 



 

Бір интерфейсте бірнеше интерфейс қасиеттері мұра-лану мүмкіндігі бар, мұндайда 



олардың ата-тектері үтір арқылы бөліне отырып жазылады.   

 



Интерфейс тұлғасын абстрактілі тәсілдер, қасиеттер мен индексаторлар 

шаблондары, оқиғалар құрайды.  

 

Интерфейс құрамында тұрақтылар, өрістер, операция-лар, конструкторлар, 



деструкторлар, типтер және кез келген статикалық элементтер болмауы тиіс.  

interface IAction 





    void Draw(); 

    int Attack(int a); 

    void Die(); 

    int Power { get; } 

 

Интерфейстердің қолданылу аймағы 

 

 



Егер қандай да бір әрекеттер жиынын қолдану тек осы әрекеттерді әртүрлі 

тәсілдермен орындайтын нақты бір кластар иерархиясы үшін маңызды болса, бұл жиынды 

иерархияның абстрактілі базалық класының виртуалды тәсілдері түрінде берген жөн.   

 



Иерархия шегінде (ішінде) бірдей жұмыс істейтін мүмкіндіктердің барлығын 

толығымен базалық класта анықтаған жөн.  

 

Интерфейстер көп жағдайда әртүрлі иерархия объектілерінің ортақ қасиеттерін 



көрсету үшін қолданылады. 

 

 



Интерфейстерді жүзеге асырудың ерекшеліктері 

 

54 

 



 

Интерфейсті жүзеге асыратын класс оның барлық элементтерін, оның ішінде, 

мұраланғандарын да анықтауы керек. Егер осындай жағдайда интерфейстің аты 

нақты түрде көрсетілетін болса, ол осыған сәйкес элемент сипатталған интерфейске 

сілтеме жасауы тиіс.  

 



Өзіндік немесе мұраланған элементтерге нақты сілтеме жасайтын интерфейс класс 

ата-тектері тізімінде көрсетілуі тиіс. 

 

Класс өзінің ата тегінің барлық тәсілдерін, оның ішінде, интерфейстерді жүзеге 



асырғандарын да мұралайды. Ол осы тәсілдерді new спецификаторының көмегімен 

қайта анықтай алады, алайда олармен тек класс объектісі арқылы ғана қатынас 

құруға болады. 

 

Параметрлері бар топтамалар (коллекциялар)(класс-прототиптер, generics) 



 

параметрлері ретінде мәліметтер типтері болатын кластар 

 

Прототип-класс (2.0 

вариантда) 

Жай класс 

 

 



Dictionary 

HashTable 



LinkedList 

— 

List 

ArrayList 

Queue 

Queue 

SortedDictionary 



SortedList 

Stack 

Stack 

 

List 

класын пайдалану мысалы 

 

using System; 

using System.Collections.Generic; 

namespace ConsoleApplication1{ 

class Program { 

        static void Main()  { 

     List lint = new List(); 

            lint.Add( 5 ); lint.Add( 1 ); lint.Add( 3 ); 

            lint.Sort(); 

            int a = lint[2]; 

            Console.WriteLine( a ); 

            foreach ( int x in lint ) Console.Write( x + " "); 

}}} 

 

14-

ші лекция.  Делегаттар 

 

 



делегаттың анықтамасы; 

 



делегаттарды қолдану; 

 



кері шақыру (callback); 

 



делегатты параметрлер тізімі арқылы беру; 

 



операциялар. 

 

Делегаттың анықтамасы 

 

55 

 



 

Делегат — бұл тәсілдерге сілтемелерді сақтауға арналған класс түрі. Делегатты 

кез кезген класс тәрізді параметр ретінде беруге, осыдан кейін ондағы 

инкапсуляцияланған тәсілді шақыруға болады.  

 



Делегаттар оқиғаларды қолдау үшін, сонымен қатар, тілдің тәуелсіз 

конструкциясы ретінде қолданылады.  

 

Делегаттың сипаттамасы оның көмегімен шақырылуы мүмкін тәсілдер 



сигнатурасын анықтайды: 

 



[ атрибуттар ] [ спецификаторлар ] delegate тип аты( 

 



[ параметрлер ] ) 

 



Делегатты сипаттау мысалы: 

 



public delegate void D ( int i ); 

 



Делегаттың базалық класы System.Delegate болып табылады  

 

Делегаттарды қолдану 



 

 



Делегаттар, негізінен, келесідей жағдайлар үшін қолданылады: 

 



шақырылған тәсілді компиляция кезінде емес, программаның орындалуы кезінде 

динамикалық түрде анықтауға мүмкіндік алу; 

 

объектілер арасында «шығу көзі — бақылаушы» типі бойынша байланысты 



қамтамасыз ету; 

 



оларға басқа тәсілдерді беруге болатындай әмбебапты (универсалды) тәсілдерді 

құру (кері шақырулар механизмін қолдау). 

 

Операциялар 

 



Делегаттарды  теңдікпен  немесе  теңсіздікпен  салыстыруға  болады.  Егер  екі 

делегаттың екеуінде де тәсілдерге сілтеме болмаса немесе екеуінде де бірдей тәсілдерге 

бірдей реттілікпен сілтемелер жасалған болса, олар тең болады.  

 



Бірдей  типті  делегаттармен  қарапайым  және  күрделі  меншіктеу  операцияларын 

орындауға болады.  

 

string  тіркестері  сияқты,  делегат  та  өзгермейтін  мәлімет  типі  болып  табылады, 



сондықтан  кез  келген  өзгерістер  жағдайында  жаңа  экземпляр  құрылады,  ал  ескісін 

кейіннен қоқыс жинаушы (сборщик мусора) өшіріп тастайды, яғни жояды.  

 

Делегатты қолдану синтаксисі тәсілді шақыру синтаксисімен бірдей болып келеді. 



Егер  делегатта  бірнеше  тәсілге  сілтемелер  сақталатын  болса,  олар  тізбектеле,  делегатқа 

қосылған реттілігімен шақырылады.  



Оқиғалар 

 

 



Оқиғаның анықтамасы 

 



Оқиғалар механизмі 

 



Делегаттар мен оқиғалар туралы қосымша 

 

Оқиғаның анықтамасы 

 

 



Оқиға — кластың басқа объектілеріне (бақылаушыларға) өздерінің күйінің өзгеруі 

туралы хабарламалар жіберуіне мүмкіндік беретін класс элементі.  

 

Бақылаушы  болу  үшін  объектінің  оқиғаларды  өңдеушісі  болуы  керек  және  ол 



оқиғалар өңдеушісін шығу көзі объектісінде (в объекте-источнике)  тіркеу керек. 

 

Мысал 



 

class Subj  {           // -------------- 

Оқиғаның шығу көзі (класс-источник)  


56 

 

public event EventHandlerOops;     // 



Станд . типті оқиғаны сипаттау 

        public void CryOops() {                  // 

Оқиғаны тудыратын тәсіл 

               Console.WriteLine( "OOPS!" );  if ( Oops != null ) Oops( this, null ); } 

    } 

class Obs     {        // --------------- 



Бақылаушыкласс -------------------------- 

        public void OnOops( object sender, EventArgs e ) {   // 

Оқиғаны өңдеуші 

                Console.WriteLine("

Оййй!" ); 

        } 

    } 

class Class1 { 



        static void Main()        { 

            Subj s  = new Subj(); 

            Obs o1 = new Obs();  Obs o2 = new Obs(); 

            s.Oops += o1.OnOops;                              // 

өңдеушіні тіркеу 

            s.Oops += o2.OnOops;                              // 

өңдеушіні тіркеу 

            s.CryOops(); 

    } 


 

Оқиғалар механизмі 

 

 



Оқиғалар  делегаттар  негізінде  құрастырылған:  делегаттардың  көмегімен 

оқиғаларды  өңдеуші  тәсілдер  шақырылады.  Сондықтан  класта  оқиғаны  құру  келесі 

бөлімдерден тұрады: 

o

 



оқиғалар өңдеушілерінің сигнатурасын анықтайтын делегатты сипаттау; 

o

 



оқиғаны сипаттау; 

o

 



Оқиғаны тудыратын тәсілді (тәсілдерді) сипаттау. 

 



Оқиғаның синтаксисі: 

 



[ атрибуттар ] [ спецификаторлар ] event тип аты 

 

15-

шілекция.C# тілі негізінде Windows-қосымшаларын жасау 

 

 



windows жүйесі ортасында программалау ерекшеліктері; 

 



оқиғалық басқару  қағидасына  негізделген программалау; 

 



visual Studio.NET ортасында жұмыс істеу негіздері

 



формалар; 

 



шығарылымды көрсету – Обозреватель Решений; 

 



қасиеттер терезесі   –  Окно Свойств. 

 

Windows-

формалар жасау негіздері 

 

C# тілінде Windows ортасы үшін программалау 

 

Windows жүйесі ортасында программалау ерекшеліктері: 

 



Алдыңғы  дәрістерде  консолдық  программалар  жасау  ар-қылы  C#  тілінің 

мүмкіндіктерімен  таныстық.  Енді  Windows  ортасында  .NET  кітапханалары  жұмысын 

қарастырып, операциялық жүйе мүмкіндіктерін толығырақ пайдалана бастаймыз.  

 



Windows жүйесі ортасында программалау ерекшеліктері:  

 



Көп  тапсырмалы  режим  –  жүйеде  бір  мезетте  бірнеше  программа  жұмыс  істей 

алады, әр программаға жеке жа-ды аймағы бөлініп, процессор уақыты да бөлініп беріліп, 

сыртқы құрылғыларды да олар ортақ пайдалана алады;  


57 

 



 

Программалар  аппаратурадан  тәуелсіз  істейді  –  олар  тікелей  құрылғыларға 

емес,  ОС-мен  байланыс  жасайды,  сондықтан  құрылғылардың  параметрлерін  программа 

есепке алмайды, олар драйверлер арқылы басқарылады. 

 



Қолданушымен  стандартты  түрде  графикалық  интер-фейс  орнатылып,  әр 

программа  бір  терезе  арқылы  тұтынушымен  байланысады,  терезелер  стандартты 

элементтерден тұрады; 

 



 

Әртүрлі  программалар  арасында  мәлімет  алмасу  ісі  жүргізіледі,  олар    буфер 

арқылы немесе  OLE мүмкінді-гімен жүргізіле береді;    

 



 

Ескі  программаларды  да  орындау  мүмкіндігі  –  Windows  жүйесінің    32-разрядты 

ортасында    16-разрядты  орта  программалары,  MS  DOS  жүйесінің  программалары    да 

орындала береді; 

 

 Windows-



қосымшаларын  жасайтын  оқиғалық  басқару    қағидасына  негізделген 

программалау  орындалады. 

Оқиғаны Windows жүйесі қабылдап, хабарламаға (тышқан шертілді, перне басылды) 

түрлендіреді,  Хабарлама  қолданушыдан  да,  ОС-тан  да,  басқа  программадан  да  келуі 

мүмкін.  Стандартты  хабар-ламалардың  бірнеше  түрлері  бар,  олар  иерархияға  сәйкес 

жұмыс істейді.  

Хабарламалар  жалпы  кезекке  келіп  түседі  де,  сонан  кейін  қосымшалар  арасында 

кезекке  тұрады.    Әрбір  қосымша  программаның  хабарламаларды  өңдеу  циклі  болады, 

солар  хабарламаларды  кезекпен  ала  отырып,  ОС  арқылы  соны  өңдейтін  ішкі 

программаларды шақырады. 

 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

58 

 

Алматинская академия экономики и статистики 



 

Кафедра «Информатика» 

 

 

 



 

 

 



 

 

 



 

ТӘЖІРИБЕЛІК  САБАҚТАРДЫ ОРЫНДАУ БОЙЫНША ӘДІСТЕМЕЛІК 

НҰСҚАУЛАР 

 

 

 

 

 



«C# 

ортасында программалау»  пәні бойынша 

 

« 5ВО70300 – Ақпараттық жүйелер»  мамандығы үшін 

 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

 

 



 

Алматы, 2013 



59 

 

 



 



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10   11




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет