Правильно ли я понимаю, что такое класс? - PullRequest
14 голосов
/ 21 марта 2010

У меня были проблемы с нахождением четкого и краткого определения класса непрофессионалов.Обычно они дают общие идеи, не говоря об этом конкретно, и мне интересно, правильно ли я это понимаю.Насколько я понимаю, класс - это набор кода, который управляет объектом.Например, в приложении, которое имеет кнопку «Да» и кнопку «Нет», а также текстовое поле для вывода, код, который сообщает компьютеру, что делать, когда пользователь использует кнопку «Да», представляет собой один класс,код для нажатия No - это другой класс, а объект - это две кнопки и то, что они делают вместе, чтобы влиять на окно вывода.Я прав, или я здесь путаю термины?

Спасибо

Ответы [ 9 ]

16 голосов
/ 21 марта 2010

Класс - это вещь вида , объект - вещь фактическая . Итак, в реальном мире «человек» - это класс, а вы и я - объекты (или экземпляры) этого класса. «Автомобиль» - это класс, мой универсал Volvo 1996 года - это объект.

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

В приведенном вами примере вполне вероятно, что кнопки «да» и «нет» являются объектами класса «кнопка» (или похожее имя) и что различия в их поведении связаны с изменениями, добавленными программистом без его или ей надоело создавать новый класс. Однако возможно, что программист принял решение сделать каждый тип кнопки подклассом исходного класса «кнопка».

Что такое подкласс? Что ж, если вы думаете о «автомобиле» как о классе, то очевидно, что между «автомобилем» и «универсалом Volvo Ларри 1996 года» стоит несколько промежуточных «видов». Это могут быть «универсал» и «универсал Volvo». Таким образом, моя машина была бы экземпляром "универсала Volvo", который сам был бы подклассом "универсала", который был бы подклассом "автомобиля". Из части «автомобиль» мы много знаем о моем объекте, из части «универсал» мы узнаем немного больше, а из «универсала Вольво» немного больше.

Способ организации классов и подклассов - это решение, принятое программистом. В моем примере выше другой программист мог бы создать классы «автомобиль», «вольво», «пред-форд» и «вагоны». Это зависит от проблемы, которую вы пытаетесь решить.

2 голосов
/ 21 марта 2010

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

  • Класс Email
    • Тема (строка)
    • Сообщение (строка)
    • ToAddress (string)
    • FromAddress (строка)
    • Отправить (функция)

Когда вы вызываете 'new Email ()', он создает новый объект с этими переменными и функциями. Затем вы можете заполнить переменные и отправить их.

2 голосов
/ 21 марта 2010

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

Как и тип для данных, класс объекта указывает , что является общим для всех экземпляров этого класса..Экземпляры, которые сами являются объектами, затем переопределяют эту общую базовую линию (в противном случае нет особого смысла иметь отдельные экземпляры).Во многих ОО-системах экземпляры могут иметь или не иметь новых членов, которые не являются частью определения класса.

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

1 голос
/ 21 марта 2010

У самого основания есть процедурный код:

var a = 4
var b = 5;
print a + b;
… and so on, statements following statements…

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

function a_plus_b() {
    var a = 4
    var b = 5;
    print a + b;
}

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

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

function foo(data) {
    …do something…
    return data;
}

function bar(data) {
    …do something else…
    return data;
}

a = "some data";
b = 123456;

a = foo(a);
b = bar(b);
c = bar(a); // ERROR, WRONG DATA FOR FUNCTION

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

class A {
    var data = 'some data';
    function foo() {
        …do something…
        return data;
    }
}

Функция foo теперь имеет переменную data, которая «связана» с ней в том же классе. Он может работать с этой переменной, не беспокоясь о том, что это могут быть неправильные данные. Также нет никакого способа, которым data может случайно оказаться в функции bar, которая является частью другого класса.

Единственная проблема в том, что здесь есть только одна переменная data. Эта функция может использоваться повторно, но она может работать только с одним набором данных. Чтобы решить эту проблему, вы создаете объекты (также называемые instance ) из класса:

instance1 = new A();
instance2 = new A();

instance1 и instance2 ведут себя точно так же, как class A, они оба знают, как выполнять функцию foo (теперь называется метод экземпляра ), и они оба содержат переменную data (теперь называется переменная экземпляра или атрибут ), но эта переменная data может содержать разные данные для обоих экземпляров.

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

1 голос
/ 21 марта 2010

Класс - это, по сути, способ организации вашего кода.

Он позволяет вам поместить весь код, относящийся к одной абстракции (подумайте «концепция» или «идея»), в одном месте.

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

0 голосов
/ 21 марта 2010

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

Например, я мог бы сказать вам, что класс является «планом» для объекта. Используя этот класс, вы можете создать несколько таких объектов, каждый из которых (потенциально) имеет уникальные атрибуты.

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

Итак, чтобы привести конкретный пример, вот класс, который определяет шар, написанный на Python:

class Ball:
    color = ''
    def __init__(self, color):
        self.color = color
    def bounce(self):
        print "%s ball bounces" % self.color

blueBall = Ball("blue")
redBall = Ball("red")

blueBall.bounce()
redBall.bounce()

Выполнение этой команды дает ожидаемый результат:

blue ball bounces
red ball bounces

Тем не менее, есть гораздо больше классов, чем я описал здесь. Как только вы поймете , что такое класс, вы начнете изучать конструкторы, деструкторы, наследование и многое другое Сломать ногу:)

0 голосов
/ 21 марта 2010

Из определения Класс в Википедии:

В объектно-ориентированном программировании класс является конструкцией, которая используется как план (или шаблон) для создания объекты этого класса. Этот план описывает состояние и поведение, все объекты класса делятся. Объект данного класса называется экземпляр класса. Класс, который содержит (и был использован для создания), что экземпляр можно рассматривать как тип этого объекта, например объект экземпляр класса "Fruit" будет типа "Фрукты".

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

Ваше понимание Класса вовсе не неверно, но чтобы прояснить ситуацию, подумайте о следующем ...

Кнопки Да и Нет, а также TextBox обычно указаны в классе, например, на коде, написанном на C # (Microsoft .NET Framework). Давайте назовем этот класс MyClass.

Действия, вызываемые кнопками, обрабатываются так называемыми обработчиками (методами). Вы можете написать свой код таким образом, чтобы при нажатии кнопки «Да» что-то записывалось в TextBox.

Чтобы создать экземпляр MyClass, вы должны сделать следующее:

MyClass myClass = new MyClass();

myClass.ButtonYes += new EventHandler(YourMethodForYes);
myClass.ButtonNo += new EventHandler(YourMethodForNo);

myClass.TextBox.Text = "Yes button was clicked";

Надеюсь, вы поняли идею.

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

Помимо определения класса, я думаю, что чтение объектно-ориентированного программирования (ООП) может помочь вам понять его еще больше. Взгляните на Основные понятия .

0 голосов
/ 21 марта 2010

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

Чтобы использовать ваш пример, может существовать класс Button, который определяет, что такое кнопка в вашем приложении. Этот класс затем будет создан дважды для предоставления двух объектов: одного для кнопки «Нет» и другого для кнопки «Да». Класс Button может иметь поле / свойство Text, которое определяет, какой текст он содержит - для соответствующих экземпляров Button для него могут быть заданы значения "Нет" и "Да", чтобы они имели различный внешний вид.

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

0 голосов
/ 21 марта 2010

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

У личного класса будут такие методы, как Talk (), Walk (), Eat (); и атрибуты, такие как высота, цвет, язык и т. д.

Класс похож на план вещей, которые вы можете создать, а также процедур , которые связаны друг с другом.

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

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