четверг, 30 июля 2015 г.

7. Протоколы

Видео урок находится здесь.
Речь в этом уроке идет про протоколы в Objective c,

Кратенький конспект (для себя).
Протокол объявляется в отдельном .h файле, который потом импортируется в нужные классы.
@protocol имя протокола <[имя родительского протокола] (опционально)>
@required - методы обязательные для реализации в классах поддерживающих протокол
@optional - методы не обязательные для реализации в классах поддерживающих протокол
 методы ...
свойства
@end


Если класс поддерживает протокол, то в объявлении добавляется:
@interface ИмяКласса: NSObject <ИмяПротокола>

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

if ([obj conformsToProtocol:@protocol(TAPatient)]) - объект obj реализует ли полностью протокол - TAPatient? (да,нет)

Проверить реализует ли объект опциональные (@optional) методы и свойства протокола можно функцией  respondsToSelector:
 if ([obj respondsToSelector:@selector(howIsYouJob)]) реализует ли объект obj метод howIsYouJob? (да/нет).

Файлы проекта урока 7 Протоколы

Домашнее задание к уроку 7.

Задание такое:
1. Реализуйте протоколы Jumpers, Swimmers, Runners. Каждый протокол должен иметь пару свойств, например скорость или максимальная высота прыжка и пару методов, например прыгать или плыть, нырять и тд. Включите фантазию!!!

2. Часть методов делайте обязательными (например у пловцов обязательный метод это плыть а у бегунов - бежать, логично?), а другую часть не обязательными.

3. Используйте классы из задания про массивы, там где у вас люди и животные. Например у кенгуру и у особых спортсменов реализуйте протокол Jumpers, тоже самое с другими протоколами. Пусть каждый протокол будет реализован как некоторыми классами животных, так и некоторыми классами людей.

4. Положите всех в одни массив. Тех кто прыгает заставьте прыгать и рассказывать про свои свойства. Причем у некоторых объектов пусть будут одни необязательные свойства или методы, а у других другие. Тот кто бегает пусть бегает, а тот кто плавает, пусть плавает. Тот кто ничего не делает должен быть выведен на экран как лодырь :)

5. Сделайте так чтобы один какой-то класс мог и бегать и прыгать и плавать и посмотрите как он себя поведет в цикле.

Вот  код  теста классов и протоколов (сами классы можно посмотреть в файлах проекта):
    TADog * dog=[[TADog alloc] init];
    dog.speedRunning=10;
    dog.smokerOrNotSmoker=notSmoker;
    dog.depthDiving=1;
    dog.speedSwimming=10;
   
    TABodyBilder *bilder=[[TABodyBilder alloc]init];
    bilder.speedRunning=10;
    bilder.smokerOrNotSmoker=smoker;
   
    TACat *cat=[[TACat alloc]init];
    cat.heightJump=100;
    cat.widthJump=150;
    cat.speedRunning=3;
    cat.smokerOrNotSmoker=notSmoker;
    TABaiker *baiker=[[TABaiker alloc]init];
    TASwimmer *swimmer=[[TASwimmer alloc]init];
    swimmer.heightJump=120;
    swimmer.widthJump=200;
    swimmer.depthDiving=5;
    swimmer.speedSwimming=15;
    swimmer.speedRunning=15;
    swimmer.smokerOrNotSmoker=notSmoker;
    NSArray *array=[NSArray arrayWithObjects:dog,bilder,cat,baiker,swimmer, nil];
    int count;
    for (NSObject <TARunners,TAJumpers,TASwimmers> *obj in array) {
        count=0;
        if ([obj conformsToProtocol:@protocol(TASwimmers)]) {
            [obj Swim];
         
        }
        else
        {
            count++;
        }
        if ([obj conformsToProtocol:@protocol(TARunners)]) {
            [obj Run];
           
        }
        else
        {
            count++;
        }
        if ([obj conformsToProtocol:@protocol(TAJumpers)]) {
            [obj Jump];
           
        }
        else
        {
            count++;
        }
       
        if (count==3) {
            NSLog(@"This is bummer");
        }

       
       
    }


Вот вывод:
  Dog Swim. Swimming speed: 10. Diving depth 1
 Dog Run. Run speed: 10  and no smoking
 Bodybilder Run. Run speed: 10  and smoke cigaret
 Cat Run. Run speed: 3  and no smoking
 Cat jump. Height jump: 100. Width jump: 150
 This is bummer
 Swimmer Swim. Swimming speed: 15. Diving depth 5
 Swimmer Run. Run speed: 15  and no smoking
Swimmer jump. Height jump: 120. Width jump: 200


Файлы с домашним заданием №7


Комментариев нет:

Отправить комментарий