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

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

12
задан Cœur 3 April 2017 в 07:03
поделиться

10 ответов

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

В C есть вещи, называемые структурами, которые могут хранить состояние. Они выглядят как объекты, например, у вас может быть структура с именем Car, которая создает экземпляры Cars и задает поля марки, модели и цвета. Однако вы не можете сказать экземплярам структуры 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

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

В 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

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

В 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

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

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

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

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

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

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

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

37
ответ дан 2 December 2019 в 03:11
поделиться

Procedural programming and OOP, both different programming paradigms, are the proverbial apples and oranges. PP relies on "subroutines". OOP sends "messages" to "objects", which change the "state" of the objects and send messages to other objects; furthermore, the behavior objects can be extended, creating new types of objects. Both rely on assignment and side-effects. Problems may have natural solutions in one paradigm, but rather baroque solutions in another. That is, a problem may be readily modeled by using objects passing messages, or by procedures.

Programming languages can support paradigms beyond ones they natively support, but it requires the programmer to implement the necessary structures. For example, you can do OOP with C; in fact, some OO extensions of C relied on preprocessors which produced C code as output.

As you progress in your studies, you'll want to look over the other paradigms, especially functional programming. It wouldn't hurt to look at logic programming (as exemplified by Prolog) and dataflow programming (see Pure Data for an example).

5
ответ дан 2 December 2019 в 03:11
поделиться

Java is a language mostly used for object oriented programming and C a language mostly used for procedural oriented programming

There is a great explanation on Wikipedia about Procedural programming vs object oriented programming:

Comparison with object-oriented programming The focus of procedural programming is to break down a programming task into a collection of variables, data structures, and subroutines, whereas in object-oriented programming it is to break down a programming task into objects with each "object" encapsulating its own data and methods (subroutines). The most important distinction is whereas procedural programming uses procedures to operate on data structures, object-oriented programming bundles the two together so an "object" operates on its "own" data structure. Nomenclature varies between the two, although they have much the same semantics: object-oriented procedural methods functions objects modules message argument attribute variable

But to make things more basic you can think of objects like you think of objects in the real world such as a car would have all the attributes of a car as other objects like windows and tires.

3
ответ дан 2 December 2019 в 03:11
поделиться

OO languages make it easier to write object oriented programs, by offering you constructs to make data abstraction and polymorphism easy to implement.

1
ответ дан 2 December 2019 в 03:11
поделиться

The object-oriented programming paradigm tells you to encapsulate state variables in entities called 'objects' which communicate via message passing, most often implemented as functions with a 'special' this or self argument.

An object-oriented programming language is a language designed to make using the oo paradigm easy. Its semantics and syntax are geared towards this goal. Inheritance (either class-based or prototypal) and subtype polymorphism are important techniques which make the abstract concept of oo feasible in practice.

1
ответ дан 2 December 2019 в 03:11
поделиться

Object oriented languages are built around the idea of data structures, called objects, that each contain their own data and behaviours. By combining these objects and having them interact with eachother you can design a program that better reflects the domain of the problem you're trying to solve.

For example, in a banking application you might have objects that represent accounts, which each store data like the balance and implement certain behaviours like transferring money.

In a more traditional language, you would keep data and behaviour in different places.

1
ответ дан 2 December 2019 в 03:11
поделиться

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

Я нашел статью в недавнем эссе Гая Стила,

1
ответ дан 2 December 2019 в 03:11
поделиться

OOP makes it easier to break down one big problem into smaller self contained parts. You can then create something more complex by combining these parts.

0
ответ дан 2 December 2019 в 03:11
поделиться

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

0
ответ дан 2 December 2019 в 03:11
поделиться

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

(2) упакован и (3) отправлен)
  • один из шагов может быть процессом сам по себе или может быть атомарным
  • 2
    ответ дан 2 December 2019 в 03:11
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: