2009-11-14 4 views

ответ

2

Объект - это экземпляр класса. Класс на первом месте.

Класс представляет собой схему или шаблон объекта. Это точная компоновка, которая описывает, как построить объект. В классическом смысле OO сначала требуется класс для создания объекта.

Это философский вопрос: лучше ли в реальности подход сверху вниз (сначала класс, затем объект) или подход снизу вверх (объект сначала, а затем абстракция класса).

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

+2

... возможно, но не в языках oop, у которых нет классов. – daf

+1

Язык не может быть объектно ориентированным, если вначале нечего создавать объект. Конечно, просто наличие объектов не делает язык ООП, но для него достаточно фундаментальная потребность. – Esko

+2

Основанные на прототипе языки OO и языки OO, основанные на характеристиках, не требуют занятий. –

0

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

Занятия на первом месте. Не может быть объекта без класса.

0

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

0

Согласно wikipedia, первый язык с явной поддержкой функций OOP был Simula, который включал понятие класса. Совсем недавно были зарегистрированы ООП, которые используют prototypes, а не такие классы, как javascript.

+0

Simula does * not * есть классы и наследование. Классы и Наследование были добавлены намного позже, в Simula-67. Smalltalk вдохновлен Simula и изначально также не имел классов или наследования. Я думаю, что они были добавлены в Smalltalk-74 (или, может быть, Smalltalk-72). Итак, * оба * язык, введший термин «объект» * и * язык, который ввел термин «объектно-ориентированное программирование» *, не имеет классов. И Алан Кей публично осудил то, как текущее «классовое программирование» делается как анти-ООП. –

+0

Интересное спасибо за исправление. –

+1

Интересные статьи, посвященные симуле, дают понять, что языковые дизайнеры действительно считают язык не совсем полным до введения обобщающей концепции классов в 67. –

2

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

Не все языки ООП имеют классы - и они вам не нужны.

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

В «Я» вы не определяете классы вообще. Скорее вы добавляете методы в «прототипический примерный объект» и клонируете его, когда вам нужны новые «экземпляры».

Многим людям нравится начинать проектирование OO-систем с диаграммами классов, но, к сожалению, это симптом SQL-мышления, а не мышления OO. Прежде всего - объекты do вещи.

+0

Тот факт, что люди, когда они говорят о «диаграмме UML», автоматически предполагают, что для обозначения «диаграммы классов UML», хотя UML также содержит несколько вариантов диаграмм объектов, действительно печально. Как вы сказали: классы ничего не делают, объекты делают. И это то, о чем идет речь в программировании: делать компьютеры * делать вещи. –

+0

Я бы не сказал, что занятия ничего не делают. Они могут быть хорошим местом для некоторых работ по созданию и настройке экземпляров, но не на таких языках, как Java и C++, которые фактически не имеют методов класса (например, вы не можете обрабатывать статику полиморфно ... т.е. они не играть по правилам OO) – daf

+1

Ну, но * причина * почему это не работает в Java и C++ и * работает * в Ruby и Smalltalk, потому что в классах Ruby и Smalltalk есть ... * TADA * ... объектов, а в Java и C++ - нет. Фактически, Ruby и Smalltalk также не имеют методов класса. Это просто обычные методы экземпляра метакласса объекта класса. –

0

В Java и C++ класс приходит первым. Не может быть объекта без класса.

Класс похож на план. Объект автомобиля. С помощью одного чертежа можно построить много автомобилей. С одним классом можно создать несколько объектов.

Это, в отличие от языков ООП на основе прототипов, таких как JavaScript. Там вы создаете общий объект и включаете его функции отдельно.

0

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

Класс - это синяя печать объекта, он представляет собой базовые формы, такие как целые числа, строки и т. Д. Поэтому теоретически объект 'typeof (object)' является самой базовой формой и не требует какого-либо класса.

Поэтому я бы сказал, что объект был первым, если кто-то не представит мне определение класса объекта.

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

0

Класс походит на общие ингредиенты и процедуру приготовления супа, а объект - суп.

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

Пример программирования:

class You { 
    string name; 
    string height; 
    string complexion; 

    void run() { 

    } 

    void swim() { 

    } 

    ... 
} 

Я надеюсь, что это помогает.

0

Короткий ответ заключается в том, что объекты на первом месте.

Длинный ответ хорошо - долго :)

  1. Эти языки называются объектно-ориентированный, по причине.
  2. Каждый служащий языка OO, мантра, все является объектом. Сюда входят классы.
  3. Есть даже языки, хотя и не OO, поддержка объектно-ориентированное программирование (как Erlang)
  4. Мы можем думать о классах действительно в разных условиях:
    • В большинстве баз класса на основе языков основной причины для использования классов поддерживает номинативную типизацию. Это возможность различать объекты по их «типу» (например, Fruit and Star).
    • Занятия обычно играют роль именования. Я имею в виду, что некоторые языки OO (например, Java) не имеют явного представления об окружающей среде, они играют все классы, находящиеся в настоящее время в пути к классам.
    • Класса может быть также использован в качестве шаблона для создания новых объектов, и, следовательно,
    • класса обычно оптимизация хака - не дублировать информацию, общую для всех экземпляров класса (для методов экземпляра)

Я уверен, что есть намного больше, но это только для начала :)

+0

«Каждый сотрудник OO использует мантру, все это объект. Сюда входят классы». - Это просто неправда. Классы C++ не являются объектами, и не все это объект в Java или C++. Исторически сложилось так, что в Simula-67 (первый язык OO, в котором впервые появились термины «класс» и «объект»), не было классов-объектов, или всего-есть-объект. –

+0

Я должен был сказать больше всего. И не соблюдение этого правила на самом деле вредит языку. О C++ Я приведу Алана Кэя «На самом деле я составил термин« объектно-ориентированный », и могу сказать, что у меня не было C++.». В Java я мог представить некоторые причины включения примитивов (например, оптимизация, вероятность на C/C++, отсутствие необходимости в операторах и перегрузка операторов), но они также вредят языку. –