Запрос проверки в моем понимании Objective-C - PullRequest
1 голос
/ 24 декабря 2010

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

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

(Изучая Objective-C, авторы предполагают, что у меня есть базовые знания в области компьютерного программирования, но я обнаружил, что базовые знания в области компьютерного программирования трудно найти, поскольку все, кто преподаёт программирование, предполагают, что у вас уже естьначните учить вас чему-то еще. Отсюда помощь по основам)

Передача и возврат:

При объявлении методов с параметрами, как работает материал с параметрами, если аргументы, передаваемые в параметры, могутимеют разные имена, чем имена параметров?Я надеюсь, что в этом есть смысл.Я знаю, что имена параметров являются переменными именно по этой причине, но ... сами аргументы отображаются в таблицу поиска или что-то в этом роде?

Во-вторых, аргумент "types" (например, int) должен совпадать с типами возвращаемых параметров, чтобы их можно было передать в метод, и вы всегда должны делать значения аргументов равными именам параметров где-то ещев вашем листинге кода перед передачей их в метод?

Правильно ли следующее: после выполнения метода он возвращает определенное значение (если оно не является пустым) классу или экземплярам, ​​которые вначале вызывают метод.

Действительно ли объектно-ориентированное программирование просто передает "ваши" методы экземпляра Objects вместе с сгенерированными системой классами и методами для получения результата?Если мы передаем вещи методам, чтобы они могли выполнять с ними некоторую работу, а затем возвращать что-то обратно, почему бы не выполнить эту работу в первую очередь, устраняя необходимость что-либо передавать?Теоретический вопрос, я думаю?Я предполагаю, что ответ будет таким: потому что это был бы сумасшедший запутанный беспорядок метода, когда все происходило одновременно, но я все равно хотел спросить.

Спасибо за ваше время.

Ответы [ 3 ]

3 голосов
/ 24 декабря 2010
  1. Переменные - это просто места, где хранятся значения.Когда вы передаете переменную в качестве аргумента, вы фактически не передаете саму переменную - вы передаете значение переменной, которая копируется в аргумент.Там нет таблицы отображения или чего-то еще - она ​​просто берет значение переменной и вставляет его в аргумент.В случае объектов переменная является указателем на объект, который существует где-то в области памяти программы.В этом случае значение указателя копируется так же, как и любая другая переменная, но оно все равно указывает на тот же объект.

  2. (аргумент «типы»… долженсоответствовать типу возвращаемого параметра…) Технически неверно, что типы должны быть одинаковыми, хотя обычно они должны быть.Некоторые типы могут быть автоматически преобразованы в другой тип.Например, char или short будет повышен до int, если вы передадите их функции или методу, который принимает int.Существует сложный набор правил для преобразования типов.Одна вещь, которую вы обычно не должны делать, это использовать приведения, чтобы отключить предупреждения компилятора о несовместимых типах - компилятор понимает это так: «Все в порядке, я знаю, что делаю», даже если вы действительно не .Кроме того, типы объектов никогда не могут быть преобразованы таким образом, поскольку переменные являются просто указателями, а сами объекты живут где-то еще.Если вы присваиваете значение переменной NSString* переменной NSArray*, вы просто лжете компилятору о том, на что указывает указатель, а не превращаете строку в массив.

  3. Не void функции и методы возвращают значение в место, где они вызваны, да.

  4. (Является ли объектно-ориентированное программирование…) Объектно-ориентированное программирование - это способ структурирования вашей программы, чтобы ее можно было концептуально описать как совокупность объектов, посылающих сообщения друг другу и выполняющих действия в ответ на эти сообщения.

  5. (почему бы не выполнить работу в первую очередь, устраняя необходимость что-либо передавать) Основная проблема в компьютерном программировании - написание кода, который люди могут понять и улучшить позже.Функции и методы позволяют нам разбивать наш код на управляемые куски, о которых мы можем рассуждать.Они также позволяют нам писать код один раз и использовать его повсеместно.Если бы мы не учитывали повторяющийся код в функциях, то нам пришлось бы повторять код каждый раз, когда это необходимо, что одновременно делает программный код намного длиннее и предоставляет тысячи новых возможностей для появления ошибок. 50 000-строчные программыстанет 500 миллионов строк программ.Мало того, что программа была бы ужасно испорчена ошибками, но это был бы такой огромный спагетти, что поиск ошибок был бы геркулесовой задачей.

Кстати, я думаю, что выможет понравиться Uli Kusterer's Masters of the Void .Это руководство по программированию для пользователей Mac, которые ничего не знают о программировании.

2 голосов
/ 24 декабря 2010

«Если мы передаем вещи в методы, чтобы они могли выполнять с ними некоторую работу, а затем возвращать что-то обратно, почему бы не выполнить эту работу в первую очередь, исключая необходимость что-либо передавать?»

В начале это было так.

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

Они дали места, где данные были заполнены, названиями, потому что программы были достаточно большими, чтобы никто больше не запоминал все числовые адреса для каждого бита данных.

Тогда действительно очень большие компьютеры, наконец, получили больше 16 КБ памяти, и программы стали превращаться в большие неуправляемые беспорядки, поэтому они кодифицировали практику как часть структурного программирования. Теперь это религиозный принцип.

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

Небольшое чтение по истории компьютеров весьма информативно о том, как мы попали туда, где мы находимся сегодня, и почему мы делаем такие странные вещи.

0 голосов
/ 24 декабря 2010

Все проверки этого типа (максимум) используются только на этапе компиляции для исправления ошибок в коде. На самом деле, во время исполнения все переменные - это просто блок памяти, который отправляется куда-то. Например, тип 'id' и тип 'int' представлены в виде 4-байтового необработанного значения, и вы можете написать (int) id и (id) int для преобразования этих типов один в другой.

А что касается имен параметров - они используются компилятором только для того, чтобы сообщить ему, в какую область памяти отправляются некоторые данные.

Это простое объяснение, на самом деле все это сложно, но я думаю, вы поймете основную идею - во время выполнения нет имен / типов переменных, все выполняется с помощью операций над блоками памяти.

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