SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
squeek school

Разработка приложений для iOS
http://school.squeek.ru
Паринов Олег
Empatika, Project Manager

Высшая Школа Экономики,
  бизнес-информатика

oleg.parinov@empatika.com
  oparinov
Курс


CS 193P           Факультет бизнес-
                    информатики

                Отделение программной
                      инженерии


          ЗАО ПРОГНОЗ
Литература
            Getting Help
•   Документация
            • The assignment walks you
                through it
•   developer.apple.comlook
              • Key spots to
                 API & Conceptual Docs in Xcode
•
                         ■

    stackoverflow.com files
               ■ Class header




•
               ■ Docs, sample code, tech notes

    Джонатан Здзиарски «iPhone
                 on Apple Developer Connection
                 (ADC) site
    SDK. Разработка приложений»
                   http://developer.apple.com
                              ■

    http://www.ozon.ru/context/
                   Dev site uses Google search
                              ■

    detail/id/4760826/

•   http://school.squeek.ru

             Thursday, January 7, 2010            5
Что в результате?

        Objective-C
         Xcode 4
         iOS SDK


  Foundation    UIKit
    командный проект
что потребуется от вас?
               Mac OS X
                   +
               iOS SDK
                   +
                Xcode
«Герой нашего
  времени»
iPhone
iPod touch
iPad
основы Objective-C
Objective-C

• ООП
• Синтаксис
• Сообщения
• Управление памятью
• Основные классы (NSString, NSArray,
  NSDictionary)
ООП
• Класс
• Объект
• Метод
• Поле
• Инкапсуляция
• Наследование
• Полиморфизм
Классы в Obj-C

• Классы тоже объекты
• Класс - шаблон для объекта
• Класс имеет поля и методы (и свойства)
• Поля скрыты извне - нужны get/set
Наследование в Obj-C
        Inheritance

             Superclass
                                       NSObject



                                       UIControl




              Subclass
                            UIButton               UITextField


        • Hierarchical relation between classes
        • Subclass “inherit” behavior and data from superclass
        • Subclasses can use, augment or replace superclass methods

Thursday, January 7, 2010                                             10
Методы класса и
         объекта
  Class and Instance Methods
• Class and Instance Methods
   Методы объекта (динамические)
  • Instances respond to instance methods
    - (id)init;
    - (float)height;
 • Instances respond to instance methods
    - (void)walk;
   - (id)init;
   - (float)height;
  •-Classes respond to class methods
     (void)walk;

• Методы класса (статические)
    + (id)alloc;
    + (id)person;
 • Classes respond to class methods
    + (Person *)sharedPerson;
   + (id)alloc;
   + (id)person;
   + (Person *)sharedPerson;
Отправка сообщения
         Message syntax
          [receiver message]
Terminology
     [receiver message:argument]
Terminology
• Message expression
          [receiver message:arg1 andArg:arg2]
          [receiver method: argument]
• Message expression
• Message
      [receiver method: argument]
       [receiver method: argument]
• Message
       [receiver method: argument] - сообщение
• Selector
       [receiver method: argument] - cелектор
• Selector
• Method
      [receiver method: argument]
 Thursday, January 7, 2010                       22
Пример
Person *voter;

int theAge = [voter age];

[voter setAge:21];

if ([voter canLegallyVote]) {
  // что-то сделать здесь
}

[voter registerForState:@"CA" party:@"Independant"];

NSString *name = [[voter spouse] name];
стадия дизайна класса
• Создание описания класса - Person
• Определение супер-класса - NSObject
• Какие свойства нужны?
  имя, возраст, может ли голосовать
• Какие действия может выполнять?
  голосовать
Defining a class
   A public header and a private implementation




Класс =                   +
            Header File       Implementation File
заголовок header and a
                        A public
                                        Definin
#import <Foundation/Foundation.h>

@interface Person : NSObject {

// переменные объекта
NSString *name;
int age;
}

// объявление методов
- (NSString *)name;                  Header File
- (void)setName:(NSString *)value;
- (int)age;
- (void)setAge:(int)age;
- (BOOL)canLegallyVote;
- (void)castBallot;

@end
реализация
                      Defining a class
                  A public header and a private implementa
#import "Person.h"

@implementation Person

- (int)age {
return age;
}
- (void)setAge:(int)value {Header File    Implementation File
age = value;
}
//... и остальные методы

@end
вызов собственных
         методов
#import "Person.h"

@implementation Person

- (BOOL)canLegallyVote {
return ([self age] >= 18);
}
- (void)castBallot {
if ([self canLegallyVote]) {
     // голосование
     }
  else { NSLog (@“I’m not allowed to vote!”);
}
@end
Динамическая и
статическая типизация

• Person *person
• id person
ничего


• nil
•   person = nil; [person castBallot];
булевая

•   BOOL flag = NO;

•   if (flag == YES)

•   YES == TRUE == 1

•   NO == FALSE == 0
селектор
id obj;
SEL sel = @selector(start:);
if ([obj respondsToSelector:sel])
{
   [obj performSelector:sel withObject:self];
}
класс объекта

• [myObject class];
• [myObject className];
• [myObject isKindOfClass:[NSString class]];
логирование


• NSLog(@’’Hi there!’’);
• NSLog(@’‘The row number %d’’, rowNumber);
NSString
• Unicode
• @’‘Some string’’
• [NSString stringWithFormat:@’‘It’s %d’’,
  number];
• [string stringByAppendingString:anotherString];
• [string stringByAppendingFormat:
• [string intValue]; [string doubleValue];
NSMutableString

• редактируемая строка
• appendString:
• appendFormat:
• insertString:atIndex:
NSArray

• массив объектов
• count
• objectAtIndex:
• +arrayWithObjects: , , ,nil
• indexOfObject:
NSMutableArray

• addObject:
• removeObject:
• insertObject:AtIndex:
NSDictionary
• objectForKey
• count
• + dictionaryWithObject:forKey:
• + dictionaryWithObjects:forKeys:
• allKeys
• allValues
NSMutableDictionary


• setObject:forKey:
• removeObjectForKey:
вызов суперкласса
• [super doSomething];
- (void)doSomething {
 // Вызов реализации у супер-класса
  [super doSomething];
  // Теперь собственное поведение
  int foo = bar;
  // ...
  }
жизненный цикл объекта

 • Создание объектов
 • Управление памятью
 • Уничтожение объектов
создание

Allocate + Initialize

Person *person;
person = [[Person alloc] init];
создание собственного init
 #import "Person.h"

 @implementation Person

 - (id)init {
 // сначала инициализируется супер-класс
 if (self = [super init])
   {
   age = 0;
   name = @“Bob”;
   // другая инициализация...
   }
 return self;
 }

 @end

Weitere ähnliche Inhalte

Ähnlich wie Squeek 1

Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыPositive Development User Group
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)Ontico
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
Один день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Один день из жизни iOs разработчика, Александр Сычёв Rambler&CoОдин день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Один день из жизни iOs разработчика, Александр Сычёв Rambler&CoСбертех | SberTech
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Denis Efremov
 

Ähnlich wie Squeek 1 (20)

Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
BDD
BDDBDD
BDD
 
Bytecode
BytecodeBytecode
Bytecode
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
UI-тесты в iOS-проекте / Михаил Домрачев (Improve Digital)
 
хранение данных
хранение данныххранение данных
хранение данных
 
Один день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Один день из жизни iOs разработчика, Александр Сычёв Rambler&CoОдин день из жизни iOs разработчика, Александр Сычёв Rambler&Co
Один день из жизни iOs разработчика, Александр Сычёв Rambler&Co
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
 

Mehr von Oleg Parinov

'Real agile' coaching session
'Real agile'   coaching session'Real agile'   coaching session
'Real agile' coaching sessionOleg Parinov
 
Oleg+olga product meetup
Oleg+olga product meetupOleg+olga product meetup
Oleg+olga product meetupOleg Parinov
 
[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1Oleg Parinov
 
[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2Oleg Parinov
 
[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3Oleg Parinov
 
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuУправление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuOleg Parinov
 
Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Oleg Parinov
 
Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Oleg Parinov
 
Лекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭЛекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭOleg Parinov
 
Product management - лекция №1
Product management - лекция №1Product management - лекция №1
Product management - лекция №1Oleg Parinov
 
Презентация проекта In Flow
Презентация проекта In FlowПрезентация проекта In Flow
Презентация проекта In FlowOleg Parinov
 
Pivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestPivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestOleg Parinov
 
Start-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭStart-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭOleg Parinov
 
Генетические алгоритмы
Генетические алгоритмыГенетические алгоритмы
Генетические алгоритмыOleg Parinov
 
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭЧетвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭOleg Parinov
 

Mehr von Oleg Parinov (20)

'Real agile' coaching session
'Real agile'   coaching session'Real agile'   coaching session
'Real agile' coaching session
 
Oleg+olga product meetup
Oleg+olga product meetupOleg+olga product meetup
Oleg+olga product meetup
 
[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1[Технопарк] Управление продуктом-1
[Технопарк] Управление продуктом-1
 
[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2[Технопарк] Управление продуктом-2
[Технопарк] Управление продуктом-2
 
[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3[Технопарк] Управление продуктом-3
[Технопарк] Управление продуктом-3
 
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.RuУправление продуктом - 5-я лекция - Технопарк@Mail.Ru
Управление продуктом - 5-я лекция - Технопарк@Mail.Ru
 
Управление продуктом - Лекция №4
Управление продуктом - Лекция №4Управление продуктом - Лекция №4
Управление продуктом - Лекция №4
 
Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2Технопарк - Управление продуктом - Лекция №2
Технопарк - Управление продуктом - Лекция №2
 
Лекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭЛекция №2 Курса Product Management в НИУ-ВШЭ
Лекция №2 Курса Product Management в НИУ-ВШЭ
 
Product management - лекция №1
Product management - лекция №1Product management - лекция №1
Product management - лекция №1
 
Презентация проекта In Flow
Презентация проекта In FlowПрезентация проекта In Flow
Презентация проекта In Flow
 
Pivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki HarvestPivot + Lean Startup #poSEEDelki Harvest
Pivot + Lean Startup #poSEEDelki Harvest
 
Instagram Design
Instagram DesignInstagram Design
Instagram Design
 
Start-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭStart-up Reality Check - Empatika в ВШЭ
Start-up Reality Check - Empatika в ВШЭ
 
Генетические алгоритмы
Генетические алгоритмыГенетические алгоритмы
Генетические алгоритмы
 
Squeek school 2
Squeek school 2Squeek school 2
Squeek school 2
 
занятие8
занятие8занятие8
занятие8
 
занятие7
занятие7занятие7
занятие7
 
занятие6
занятие6занятие6
занятие6
 
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭЧетвертое занятие курса iOS-разработки в ГУ-ВШЭ
Четвертое занятие курса iOS-разработки в ГУ-ВШЭ
 

Squeek 1