Разделы презентаций


6 лекция. Клас тар : жалғасы

Содержание

Бурибаев Б.)Бурибаев Б.)Аргументтер саны айнымалы тәсілдерclass Class1 { public static double Average( params int[] a ) { if ( a.Length == 0 )

Слайды и текст этой презентации

Слайд 1Бурибаев Б.)
6 лекция. Кластар: жалғасы
Класc тәсілдері мен операцияларының асыра

жүктелуі. Рекурсивтік тәсілдер, параметрлер саны айнымалы тәсілдер. Индексаторлар. Деструкторлар.

Бурибаев Б.)6 лекция. Кластар: жалғасы Класc тәсілдері мен операцияларының асыра жүктелуі. Рекурсивтік тәсілдер, параметрлер саны айнымалы тәсілдер.

Слайд 2Бурибаев Б.)
Бурибаев Б.)
Аргументтер саны айнымалы тәсілдер
class Class1 {

public static double Average( params int[] a ) {

if ( a.Length == 0 )
throw new Exception( «Аргументтері жеткіліксіз");
double sum = 0;
foreach ( int elem in a ) sum += elem;
return sum / a.Length;
}
static void Main() { try {
int[] a = { 10, 20, 30 };
Console.WriteLine( Average( a ) ); // 1
int[] b = { -11, -4, 12, 14, 32, -1, 28 };
Console.WriteLine( Average( b ) ); // 2
short z = 1, e = 13;
byte v = 100;
Console.WriteLine( Average( z, e, v ) ); // 3
Console.WriteLine( Average() ); // 4
}
catch( Exception e ) {Console.WriteLine( e.Message ); return; }
}}

Нәтижесі:
20
10
38
Аргументтері жеткіліксіз

Бурибаев Б.)Бурибаев Б.)Аргументтер саны айнымалы тәсілдерclass Class1 {   public static double Average( params int[] a

Слайд 3Бурибаев Б.)
Бурибаев Б.)
Рекурсивтік тәсілдер
Рекурсивтік деп өзін-өзі шақыратын (тура рекурсия)

тәсілді атайды. Екі немесе одан да көп тәсілдер бірін-бірі шақыратын

болса, олар – жанама рекурсия деп аталады.
Есептеулерді аяқтау үшін әрбір рекурсивтік тәсілдің кем дегенде бір қайтару операторымен аяқталатын рекурсивтік емес алгоритм тармағы болуы керек.

long fact( long n ) {
if ( n == 0 || n == 1 ) return 1; // рекурсивтік емес тармақ
return ( n * fact( n – 1 ) ); // рекурсивтік тармақ
}
… long m=fact(4);


// немесе:
long fact( long n ) { return ( n > 1 ) ? n * fact( n – 1 ) : 1; }

стек





n = 4 …

n = 3 …

n = 2 …

n = 1 …

Бурибаев Б.)Бурибаев Б.)Рекурсивтік тәсілдер Рекурсивтік деп өзін-өзі шақыратын (тура рекурсия) тәсілді атайды. Екі немесе одан да көп

Слайд 4Бурибаев Б.)
Рекурсияның сипаттамалары
Рекурсияның артықшылығы: программа қысқа, әрі ықшам жазылады.
Кемшіліктері: стектің

толып кету қаупі бар; тәсілді қайталап шақыруға және оған параметрлердің

көшірмелерін жіберуге уақыт пен жадының қажеттілігі.

Бурибаев Б.)Рекурсияның сипаттамаларыРекурсияның артықшылығы: программа қысқа, әрі ықшам жазылады.Кемшіліктері: стектің толып кету қаупі бар; тәсілді қайталап шақыруға

Слайд 5Бурибаев Б.)
Бурибаев Б.)
Тәсілдердің асыра жүктелуі
Атаулары бірдей, бірақ параметрлерінің типтері

әртүрлі бірнеше тәсілдерді қатар қолдану тәсілдердің асыра жүктелуі деп аталады.


Компилятор берілген нақты параметрлердің типі бойынша қандай тәсілді шақыру керектігін анықтайды. Бұл асыра жүктелуге рұқсат беру (resolution) деп аталады.
// Екі бүтін санның үлкенінің мәнін қайтарады:
int max( int a, int b )
// Үш бүтін санның үлкені мәнін қайтарады:
int max( int a, int b, int c )
// Бірінші параметрдің мәні үлкенін және екінші параметрдің ұзындығының үлкенін қайтарады:
int max ( int a, string b )
...
Console.WriteLine( max( 1, 2 ) );
Console.WriteLine( max( 1, 2, 3 ) );
Console.WriteLine( max( 1, "2" ) );
Тәсілдердің асыра жүктелуі полиморфизм көрінісі болып табылады.
Бурибаев Б.)Бурибаев Б.)Тәсілдердің асыра жүктелуі Атаулары бірдей, бірақ параметрлерінің типтері әртүрлі бірнеше тәсілдерді қатар қолдану тәсілдердің асыра

Слайд 6Бурибаев Б.)
Бурибаев Б.)
Класс операциялары
С# тіліндегі кластардың өз ішкі операцияларының

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

сияқты өрнектердің құрамында объект экземплярларын қолдануға мүмкіндік береді:
MyObject a, b, c; ...
c = a + b; // MyObject класының қосу операциясы
Кластың өз операцияларын анықтау операциялардың асыра жүктелуі деп аталады.
Класс операциялары арнайы түрдегі тәсілдер (функция-операциялар) арқылы былай сипатталады:
public static операцияны_жариялаушы { тұлға }
Мысалы: public static MyObject operator --( MyObject m ) { … }

C# тілінде класс операцияларының 3 түрі бар: унарлы, бинарлы және типті түрлендіру операциялары.
Бурибаев Б.)Бурибаев Б.)Класс операциялары С# тіліндегі кластардың өз ішкі операцияларының басым бөлігі әрекеттерін қайта анықтауға болады. Бұл

Слайд 7Бурибаев Б.)
Класс операцияларын сипаттаудың жалпы ережелері
операция кластың ашық статикалық тәсілі

ретінде сипатталуы тиіс (public static спецификаторлары);
параметрлер операцияларға мәні бойынша берілуі

тиіс (яғни, операция алдына ref немесе out түйінді сөздері жазылмауы тиіс);
Кластың барлық операцияларының сигнатуралары әртүрлі болуы тиіс;
операцияда қолданылатын типтер операциялардың өздерінен кем болмайтындай қатынас құқықтарына ие болуы тиіс (яғни операцияларды қолданған кезде параметрлерге де қол жеткізуге болады).

Бурибаев Б.)Класс операцияларын сипаттаудың жалпы ережелеріоперация кластың ашық статикалық тәсілі ретінде сипатталуы тиіс (public static спецификаторлары);параметрлер операцияларға

Слайд 8Бурибаев Б.)
Бурибаев Б.)
Унарлы операциялар
Мынадай операцияларды анықтауға болады: +

- ! ~

++ -- true false
Тақырыптар мысалдары:
public static int operator +( MyObject m ) // унарлы қосу
public static MyObject operator --( MyObject m ) // декремент
Параметрдің типі класс типіндей болуы тиіс.
Операция төмендегілерді қайтаруы керек:
+, -, ! және ~ операциялары үшін кез келген типтегі шама;
++ және -- операциялары үшін өзі анықталатын кластың типіне сәйкес шама.
Операциялар өздеріне берілетін операндтың мәнін өзгертпеуі керек. Өзі анықталатын кластың типіне сәйкес мәнді қайтаратын операция осы кластың жаңа объектісін құрып, онымен қажетті әрекеттерді орындауы керек және оны нәтиже ретінде беруі керек.
Префикстік және постфикстік инкремент/декремент ажыратылмайды (бірдей болып есептеледі)
Бурибаев Б.)Бурибаев Б.)Унарлы операциялар Мынадай операцияларды анықтауға болады: +   -   !

Слайд 9Бурибаев Б.)
Бурибаев Б.)
Кластың унарлы операциясы мысалы
class Monster {
public static

Monster operator ++(Monster m)
{
Monster temp

= new Monster();
temp.health = m.health + 1;
return temp;
}

}


Monster vasia = new Monster();
++vasia; vasia++;

Бурибаев Б.)Бурибаев Б.)Кластың унарлы операциясы мысалыclass Monster { public static Monster operator ++(Monster m) {

Слайд 10Бурибаев Б.)
Бурибаев Б.)
Бинарлық операциялар
Төмендегідей операцияларды анықтауға болады:
+ -

* / % & |

^ << >> == != > < >= <=

Бинарлық операциялар тақырыптары мысалдары:
public static MyObject operator + ( MyObject m1, MyObject m2 )
public static bool operator == ( MyObject m1, MyObject m2 )
Операцияға берілетін кем дегенде бір параметрдің типі өзі анықталатын кластың типімен сәйкес келуі керек. Операция кез келген типтегі мән қайтара алады.
== және !=, > және <, >= және <= операциялары тек жұптарымен бірге анықталады да, олар логикалық мән қайтарады.
Бурибаев Б.)Бурибаев Б.)Бинарлық операциялар Төмендегідей операцияларды анықтауға болады:+  -  *  /  %

Слайд 11Бурибаев Б.)
Бурибаев Б.)
Кластың бинарлық операциялары мысалы
class Monster {
public static

Monster operator +( Monster m, int k )
{ Monster

temp = new Monster();
temp.ammo = m.ammo + k;
return temp;
}
public static Monster operator +( int k, Monster m )
{ Monster temp = new Monster();
temp.ammo = m.ammo + k;
return temp;
}

}

Monster vasia = new Monster();
Monster masha = vasia + 10;
Monster petya = 5 + masha;

Бурибаев Б.)Бурибаев Б.)Кластың бинарлық операциялары мысалыclass Monster { public static Monster operator +( Monster m, int k

Слайд 12Бурибаев Б.)
Бурибаев Б.)
Типті түрлендіру операциялары
Бұлар қолданушы мәліметтері типтері арасында

тікелей және жанама түрлендіру мүмкіндіктерін қамтамасыз етеді.
implicit operator тип

( параметр ) // жанама түрлендіру
explicit operator тип ( параметр ) // тікелей түрлендіру
Параметр типінен операция тақырыбында көрсетілген типке түрлендіруді жүзеге асырады. Осы типтердің біреуі операция анықталатын класқа сәйкес болу керек. Осылайша, операциялар класс типін басқа типке немесе керісінше түрлендіруді орындайды.
public static implicit operator int( Monster m )
{
return m.health;
}
public static explicit operator Monster( int h )
{
return new Monster( h, 100, "FromInt" );
} ...
Monster Masha = new Monster( 200, 200, "Masha" );
int i = Masha; // нақты емес түрлендіру
Masha = (Monster) 500; // нақты түрлендіру

Бурибаев Б.)Бурибаев Б.)Типті түрлендіру операциялары Бұлар қолданушы мәліметтері типтері арасында тікелей және жанама түрлендіру мүмкіндіктерін қамтамасыз етеді.

Слайд 13Бурибаев Б.)
Бурибаев Б.)
Түрлендіру операцияларын қолдану
Нақты емес түрлендіру төмендегідей жағдайларда автоматты

түрде орындалады:
объектіні мақсатты типтегі айнымалыға меншіктеу кезінде;
объектіні мақсатты типтегі айнымалылары

бар өрнекте қолдану кезінде;
объектіні тәсілге мақсатты типтегі параметрдің орнына беру кезінде;
типті нақты түрде келтіру кезінде.
Нақты түрлендіру типті келтіру операциясын қолдану кезінде орындалады.
Бурибаев Б.)Бурибаев Б.)Түрлендіру операцияларын қолдануНақты емес түрлендіру төмендегідей жағдайларда автоматты түрде орындалады:объектіні мақсатты типтегі айнымалыға меншіктеу кезінде;объектіні

Слайд 14Назар аударғаныңыз
үшін рахмет

Назар аударғаныңыз үшін рахмет

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика