Насколько важен переход от программирования приложений Java к iPhone? - PullRequest
12 голосов
/ 28 января 2009

Я - высококвалифицированный Java-разработчик, изучающий разработку iPhone. Mac только разрабатывает аспекты, сколько будет скачок в изучении стека мобильных приложений? Конечно, я понимаю, что он ближе к C в том, как к нему нужно подходить, и с этим приходит управление памятью и так далее.

Мои запросы также включают

  1. Насколько хорошо поддерживается OOP / OOAD?
  2. Существуют ли какие-либо API-интерфейсы, которые позволяют проводить модульное тестирование?

Я бы рекомендовал тем, кто отвечает, процитировать внешние сайты и ссылки, чтобы помочь разработать детали

Ответы [ 9 ]

11 голосов
/ 28 января 2009

Языком разработки является Objective-C, который является чистым C с очень тонкой оберткой объекта поверх. Их синтаксис выглядит довольно странно, но с ним довольно легко разобраться, если вы знаете C, как только перебираете вызовы сообщений - у меня есть твердый фон C, и я начал получать Objective-C месяц или два назад, поэтому но я нахожу это действительно довольно приятным - больше, чем C ++.

Трудность, с которой вы столкнетесь, если у вас есть только кодированный Java, - это указатели и управление памятью. Управление памятью не является концептуально сложным, поскольку это просто (!) Вопрос отслеживания того, что вы выделяете и выпускаете, плюс XCode, кажется, поставляется с хорошими инструментами для обнаружения утечек (хотя я еще не использовал их в гневе) - и поскольку программы для iPhone относительно невелики, это не то же самое, что кодирование большой системной программы, где это может быть чрезвычайно сложно. Основная концептуальная трудность, с которой вы, вероятно, столкнетесь, заключается в том, чтобы просто разобраться с указателями, поскольку они широко используются (как почти в каждой строке кода), и вам действительно необходимо полностью их использовать. Одна из повторяющихся тем Джоэла на подкасте - это трудность, с которой некоторые программисты сталкиваются с использованием указателей, поэтому я бы порекомендовал вам принять это к сведению и, возможно, взять хорошую книгу - возможно, оригинальную K & R.

Кто-то может захотеть поправить меня, но хотя API Какао выглядит превосходно, кажется, что за пределами фреймворка доступно немного библиотек (в отличие от C ++ или Java). Например, мне пришлось добавить свои собственные классы очереди и стека - хотя NSMutableArray делает это чрезвычайно легко.

В целом, хотя я определенно считаю, что это одна из самых забавных платформ для игры, которую я использовал некоторое время.

6 голосов
/ 28 января 2009

Несколько месяцев назад я был веб-программистом на Java, который не изучал C с колледжа. Теперь у меня завершено одно приложение для iPhone (для моей повседневной работы я застрял там в бюрократии, так что его еще нет в магазине приложений), а второе приложение почти завершено.

Чтобы ответить на ваш вопрос, самыми большими препятствиями являются понимание соглашений (шаблон делегирования, категории и т. Д.), Понимание управления памятью и работа с XCode (хорошая IDE, но определенно уступает Eclipse и IntelliJ).

Я также думаю, что документация на веб-сайте Apple Developer Center хорошо написана, и хороший разработчик может быстро приступить к работе.

Чтобы более конкретно ответить на ваш вопрос, я еще не пробовал модульное тестирование, но мне кажется, что ООП великолепен - мои доменные объекты в приложениях для iPhone такие же надежные и мощные, как и те, что я написал на Java.

4 голосов
/ 28 января 2009

Я окончил колледж в качестве разработчика Java. Моей первой (настоящей) работой была разработка Mac. Переход с языка, который я знаю (моей отправной точкой была Java), на что-то вроде Objective-C было довольно простым с точки зрения кода. Чтобы максимально ускорить разработку приложений для iPhone / Mac, вы должны использовать XCode и Interface Builder. Как только вы научитесь прикреплять события и выходы GUI (объекты, с которыми ваш интерфейс хочет общаться), вы будете настроены на нормальную разработку приложений для iPhone.

Вот шаги, которые я прошел, изучая Objective-C (язык программирования для разработки на iPhone) с моим фоном Java:

  1. Изучите основные объектно-ориентированные концепции ОС. Подклассы (наследование), протоколы (интерфейсы Java), свойства объекта (свойства бина), методы (вы должны явно указывать метки «ввода параметров», в отличие от C / C ++ / Java, где вы угадываете порядок параметров).

  2. Поймите разницу между Objective-C, Cocoa, Aqua и C. Затем узнайте, как использовать фреймворки. Фреймворки почти такие же, как и пакеты Java.

  3. Ознакомьтесь с использованием следующих базовых классов: NSString, NSArray, NSDictionary, NSSet, NSURL, NSAutoreleasePool.

  4. Узнайте больше о Интерфейсном Разработчике. До этого я думал, что способ программирования на Visual Basic ограничивает программиста. Я был неправ. Лучше сначала «визуализировать» приложение, прежде чем вы поймете, как в нем обстоят дела. Обратите внимание на ключевые слова IBAction (аналогично созданию EventListener), Outlets (у вас есть только несколько объектов, «выставленных» для ваших элементов пользовательского интерфейса), Views (UIView в случае iPhone, все, что «видно» в приложении, может быть считается «представлением») и контроллерами (есть готовые контроллеры, которые можно использовать для заполнения табличных представлений, переворачивания карточных представлений и т. д.).

  5. Узнайте, как развернуть приложение через Портал разработчиков iPhone. Вы не можете отправить любое приложение iPhone на любое устройство, если у вас нет этого «права». Да, я знаю, что это отстой, но вы все равно должны пройти этот процесс, если хотите продавать свои приложения.

Кстати, вы можете использовать следующее для модульного тестирования кода iPhone: Модульное тестирование iPhone

Надеюсь, это поможет. :)

2 голосов
/ 28 января 2009

Для модульного тестирования есть несколько вариантов, OCUnit был связан выше. Существует также google-toolbox-for-mac .

ООП в target-c хорошая, довольно чистая. Вы также будете сталкиваться с функциями старой школы C.

Используемый API называется Cocoa-Touch и построен на Cocoa, которая была построена из NextStep, поэтому существует большая история проектирования и доработок.

Нет сборки мусора на iPhone. Золотое правило: « Если вы выделите, тогда вы отпустите ». Есть много вопросов по SO относительно управления памятью, поэтому я не буду вдаваться в подробности.

Основным препятствием являются различия в дизайне / архитектуре. Приложения для iPhone и Java создаются с использованием различных соглашений. Поэтому потребляйте столько Objective-C / какао / Cocoa-Touch код, сколько вы можете найти / стоять.

Потратьте некоторое время на работу с Интерфейсным Разработчиком, это может усугубить ситуацию, но обычно это означает, что вы не понимаете, в чем дело. Если у вас есть четкое представление о том, как работает IB и что он может для вас сделать, вы по-настоящему оцените это.

Cocoadev.com - это удобный ресурс для подбора дизайна и примеров кода.

Cocoadevcentral.com имеет отличную коллекцию статей, включая разработку какао для настольных компьютеров. Его статья learn target-c - одна из лучших, которые вы найдете.

Получите учетную запись Apple Developer Connection, если у вас ее еще нет. Вам не нужно платить за это, но вы получите доступ к документации и инструментам.

АЦП iPhone

Справочная библиотека iPhone API Документы, руководства, примеры кода, Официальные материалы Apple.

2 голосов
/ 28 января 2009

Objective-C является объектно-ориентированным языком, поэтому, что касается ООП, почти все, что вы можете делать в Java, вы можете делать с Obj-C.

У меня нет никакого опыта с этим, но вот по крайней мере один ресурс на OCUnit, цель-c эквивалентна JUnit: http://developer.apple.com/tools/unittest.html

Самая большая проблема, с которой я столкнулся при переходе, определенно связана с управлением памятью. Изучить синтаксис и API довольно просто, но без GC жизнь сложна!

РЕДАКТИРОВАТЬ: О да, вторая по величине проблема - это XCode, IDE, используемая для разработки Mac / iPhone. Поддержка рефакторинга минимальна, и мне неудобно перемещаться между файлами. Ожидайте, что это тоже немного замедлит вас.

1 голос
/ 28 января 2009

Я бы не сказал, что я эксперт по любому языку, но я компетентен в некоторых. Большая часть кода, который я написал недавно, была "корпоративного" типа.

Предполагая, что вы знакомы с новым API и языком, самое большое различие, которое я обнаружил, заключается в том, насколько ограничен iPhone с точки зрения производительности процессора и доступной памяти. Я очень привык тратить немного памяти на лучшую производительность - почти бессознательно - или быть немного расточительным, потому что в моем распоряжении восемь ядер. Это действительно плохая идея для iPhone!

Другая сложная вещь - убедиться, что это iPhone-y. Создание хорошего приложения - это не просто сокращение графического интерфейса, вам действительно нужно подумать об эффективном представлении данных.

Технические аспекты в значительной степени отсортированы. Сторона модульного тестирования менее продвинута, чем на стороне Java. С другой стороны, я обнаружил, что могу быть гораздо более продуктивным и менее подверженным ошибкам в Objective C, чем Java, и это, вероятно, связано с совершенно иной объектной моделью (вы склонны делегировать, а не наследовать).

1 голос
/ 28 января 2009

Ну, Java был основан на Objective C и Smalltalk, которые являются объектно-ориентированными языками. Основными проблемами будут синтаксис (который не полностью основан на C, как C ++ и Java), указатели и ручное управление памятью.

Это основано на некоторых очень старых знаниях Objective C, но я знаю, что когда я перешел с Objective C на Java (около 2000 года), это было довольно легко, так как базовые концепции были довольно близки.

На основе цели C

Управление памятью

0 голосов
/ 05 мая 2009

Если вы понимаете идею ООП через свой опыт Java и если у вас есть базовое представление о том, что такое указатели и управление памятью, то последним препятствием на вашем пути будет чужой синтаксис.

Синтаксис: я нашел этот учебник , среди прочего, очень ясным и кратким. На мой взгляд, я концептуально сопоставил инфраструктуру Objective-C и Java, которую вы можете сделать по большей части (то есть сообщение - это, по большей части, метод, протокол - это интерфейс и т. Д.). Пройдя первоначальный шок, вы обнаружите, что разработка Objective-C для приложений пользовательского интерфейса может быть довольно интуитивной и приятной.

Структура: я не так много программирую в пользовательском интерфейсе, поэтому я обнаружил, что мне нужно лучше понять парадигму MVC.

Вы также можете найти некоторые классные языковые функции, такие как категории , которые вы хотите , которые вы имели в Java. Я также нахожу отсутствие некоторых других конструкций, таких как отсутствие статических элементов .

0 голосов
/ 28 января 2009

Стоит отметить, что вы можете использовать объекты C ++ и C ++ в вашем коде Objective-C, часто называемом Objective-C ++. Это может быть ценным подходом для отделения вашей модели данных и другого независимого от платформы кода (написанного в стандарте C ++) от вашего кода пользовательского интерфейса (написанного в Objective-C с использованием инфраструктуры Какао).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...