В чем разница между объектно-ориентированными языками и не-объектно-ориентированными языками?

Я слышал о том, как C является неъектно-ориентированным языком и как Java является объектно-ориентированным языком. Мне было интересно, в чем разница?

Ответ 1

Ничего себе, много больших ООП-терминов бросают к этому парню. Будучи тем, кто начал программировать программирование и теперь в основном занимается ООП, это концептуально, как я думаю о различии (без всех больших терминов):

В C у вас есть вещи, называемые structs, которые могут содержать состояние. Они вроде бы кажутся объектами, например, у вас может быть структура под названием "Автомобиль" и создавать экземпляры "Автомобили", а также задавать ее марку, модель и цвет. Тем не менее, вы не можете сказать экземплярам Car car делать что-либо. Вместо этого, если вы хотите вымыть свой автомобиль, вам нужно передать экземпляр автомобиля какой-либо внешней функции, например:

WashMyCar(myCar);

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

public class Car {
  String make;
  String model;
  String color;
}

Затем вы делаете экземпляр автомобиля следующим образом:

Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";

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

public class Car {
  String make;
  String model;
  String color;
  String condition;
  void washMe() {
    this.condition = "clean";
  }
  void goOffroad() {
    this.condition = "dirty";
  }
}

Теперь вы можете сделать это:

Car myCar = new Car();
myCar.make = "Honda";
myCar.model = "Accord";
myCar.color = "Black";

myCar.goOffroad();
System.out.println(myCar.condition); // dirty
myCar.washMe();
System.out.println(myCar.condition); // clean

Надеюсь, этот пример поможет. Разумеется, для ООП (и процедурного) гораздо труднее, чем этот простой пример. Но основное отличие заключается в том, что классы объектов "владеют" своими собственными методами.

Ответ 2

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

Языки программирования могут поддерживать парадигмы за пределами, которые они поддерживают, но это требует от программиста реализации необходимых структур. Например, вы можете делать ООП с помощью C; на самом деле, некоторые OO-расширения C опирались на препроцессоры, которые генерировали C-код в качестве вывода.

По мере того, как вы продвигаетесь в своих исследованиях, вам нужно посмотреть на другие парадигмы, особенно функциональное программирование. Было бы неловко смотреть на логическое программирование (как проиллюстрировано Prolog) и (см. Pure Data для примера).

Ответ 3

Java - это язык, который в основном используется для объектно-ориентированного программирования, а C - язык, используемый в основном для процедурно-ориентированного программирования.

Существует большое объяснение Википедия о процедурных программах и объектно-ориентированном программировании:

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

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

Ответ 4

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

(Учитывая Java - объектно-ориентированный язык, а C - процедурный язык)

Объектно-ориентированный язык

  • Основная концепция объектов (рассмотрим автомобиль)
  • объекты имеют свойства, которые их определяют, они могут быть постоянными или меняющимися (автомобиль красный, модель 2004 года и имеет круиз-контроль, а также в настоящее время имеет 100K на одометре и топливе 3/4).
  • объекты могут быть отправлены сообщения, которые влияют на него (автомобиль может быть выведен из A в B, автомобиль может быть заправлен топливом).

Процедурный язык

  • Основная концепция процесс (подумайте о размещении в онлайн-заказе)
  • для завершения процесса он должен пройти несколько шагов (заказ должен быть отправлен на склад, (2) в коробке и (3) отправлен)
  • одним из шагов может быть сам процесс, или он может быть атомарным

Ответ 5

Языки OO упрощают запись объектно-ориентированных программ, предлагая вам конструкции, позволяющие легко абстрагировать данные и полиморфизм.

Ответ 6

Парадигма объектно-ориентированного программирования сообщает вам инкапсулировать переменные состояния в объекты, называемые "объекты", которые обмениваются данными путем передачи сообщений, чаще всего реализуются как функции с аргументом "special" this или self.

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

Ответ 7

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

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

На более традиционном языке вы будете хранить данные и поведение в разных местах.

Ответ 8

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

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

Ответ 9

OOP упрощает разбиение одной большой проблемы на более мелкие автономные части. Затем вы можете создать нечто более сложное, объединив эти части.

Ответ 10

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

Ответ 11

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