2011-08-29 3 views
4

Я все еще очень изучаю основы Objective-C, но я все еще пытаюсь справиться с объектами и классами.Объектно-ориентированное программирование - Когда добавлять новый класс?

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

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

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

С наилучшими пожеланиями.

ответ

6

много намеков на новый класс

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

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

  • Извлеките хорошие функции из любого сложного кода. Это должен быть ваш первый приоритет, хорошие функции, которые хорошо справляются. Затем посмотрите, все ли функции связаны с одним понятием и группой вместе в классе.

  • У вас есть много кода, который делает то же самое, но обрабатывает различные варианты. Затем у вас есть абстракция/интерфейс и несколько подклассов.

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

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

+0

+1: Хороший ответ! – FreeAsInBeer

0

Класс не ограничен конкретными предметами, как вы упомянули Автомобиль, Ford. Его можно использовать для отображения абстрактных вещей. По крайней мере, в вашем случае сами браузер, страница и закладка могут быть классами. Состав объектов - хорошая практика программирования OO.

+0

Так, например, было бы удобно назвать класс «Печать», и внутри этого класса есть методы, такие как «changePageOrientation» и «showPrintPreview»? Затем в других классах, если мы хотим что-то напечатать, мы создадим экземпляр класса «Печать» и предоставим эти методы соответствующей информации (например, данные для печати)? – achiral

0

Вы должны сначала проанализировать свой домен, данные, с которыми будет работать ваш сайт. Просто напишите на бумаге, извлеките существительные и подумайте, можете ли вы представить их как отдельные объекты. В вашем примере вы можете создать класс Car, если у вас есть сайт автомагазина. Вскоре вы сможете извлекать различные типы оборудования для этого автомобиля и других связанных классов. Это просто вопрос мышления с точки зрения объектов, но не методов в первую очередь. Посмотрите here, может быть, это даст вам больше информации. В конце концов вы, вероятно, работаете с базой данных, которая сама подразумевает разделение данных на сущности.Вероятно, у многих из этих объектов есть методы. Посмотрите также на MVC, чтобы получить базовые знания о том, как вы можете представить Автомобиль на веб-странице. Надеюсь, это поможет вам немного.

0

Вы думаете о процедурных языках, таких как C. Это неплохо, поскольку для процедурных языков есть все виды использования, но это не так, как вы хотите думать с объектно-ориентированным языком, например Objective-C.

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

В ООП у вас есть данные и код, который работает с этими данными. Код и данные идут вместе. Данные - это переменные-члены вашего класса, а код - это функции-члены вашего класса.

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

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

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

0

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

Так ....

  • Создать класс всякий раз, когда вы хотите, чтобы представить объект, который вы хотели бы действовать на.
  • Создайте функцию, если вы хотите выполнить задание .

Счастливое кодирование!

Смежные вопросы