когда делать класс и функцию - PullRequest
9 голосов
/ 20 февраля 2010

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

Какие хорошие книги я читаю, чтобы выучить эти понятия?

Ответы [ 6 ]

9 голосов
/ 20 февраля 2010

Очень общий вопрос, поэтому всего несколько правил:

  • повторное использование кода: если у вас в двух местах одинаковый или очень похожий фрагмент кода, его следует переместить в функцию

  • удобочитаемость: если функция занимает более одной страницы на экране, вы можете разбить ее на несколько функций

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

3 голосов
/ 20 февраля 2010

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

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

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

Помимо того, что они выступают в качестве организационного элемента, следует использовать классы, чтобы можно было легко повторно использовать и создавать несколько «вещей» - предположим, вы хотели получить коллекцию этих Транспортных средств. Классы позволяют вам связать смысл или хотя бы некоторую семантику с вашей программой.

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

1 голос
/ 20 февраля 2010

Это на самом деле очень просто никки!

Цель разделения кода на методы состоит в том, чтобы просто разрешить его повторное использование. Когда вы создаете метод, вы позволяете своей программе вызывать его в любое время из нескольких мест вместо повторения кода снова и снова.

Так что каждый раз, когда вы пишете строки и думаете ... «эй, мне может понадобиться эта функция снова где-нибудь в моей программе», тогда вам нужно поместить ее в метод.

Что касается классов, вы попытаетесь сгруппировать аналогичные функции вместе. И старайтесь, чтобы занятия были короткими и простыми. Если вам нужно несколько классов, вы также сгруппируете их в пакеты и т. Д.

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

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

Счастливого обучения!

1 голос
/ 20 февраля 2010

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

  • Классы
    • Наборы связанных данных принадлежат классам вместе
    • Функции для работы с этими данными должны быть в классах вместе
      Классическим примером является то, что функции класса Car будут такими вещами, как Drive и AddGass
  • функции
    • Если вы собираетесь использовать его больше, чем когда-то, это должно быть в функции
    • Большинство функций должны содержать не более одного экрана кода
    • Функции должны делать что-то хорошо, а не кучу вещей плохо

Существует множество мнений, но со временем вы должны разработать свой собственный стиль.

1 голос
/ 20 февраля 2010

Посмотрите на

Процедура, подпрограмма или функция? , Объектно-ориентированное программирование

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

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

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

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

0 голосов
/ 20 февраля 2010

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

...