Объектно-ориентированное программирование - когда добавлять новый класс? - PullRequest
4 голосов
/ 29 августа 2011

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

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

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

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

С уважением.

Ответы [ 5 ]

6 голосов
/ 29 августа 2011

Много подсказок новому классу

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

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

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

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

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

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

0 голосов
/ 29 августа 2011

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

Так ....

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

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

0 голосов
/ 29 августа 2011

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

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

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

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

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

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

0 голосов
/ 29 августа 2011

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

0 голосов
/ 29 августа 2011

Класс не ограничивается конкретными вещами, как вы упомянули Автомобиль, Форд. Это может быть использовано для отображения абстрактных вещей. По крайней мере, в вашем случае сам Browser, Page и Bookmark могут быть классами. Композиция объектов является хорошей практикой в ​​ОО-программировании.

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