面向对象的设计从发明计算机的那一刻起就开始了。那里有编程,编程方法也应运而生。编程基本上是在向计算机提供某些指令。
在计算时代初期,编程通常仅限于机器语言编程。机器语言是指特定于特定机器或处理器的那些指令集,其形式为0和1。这些是位序列(0100110…)。但是用机器语言编写程序或开发软件非常困难。
用当今的场景开发使用位序列的软件实际上是不可能的。这是程序员转向下一代编程语言,开发汇编语言的主要原因,因为汇编语言与英语足够接近,因此易于理解。这些汇编语言用于微处理器。随着微处理器的发明,汇编语言在整个工业中得到了繁荣和统治,但这还远远不够。程序员再次想出了新的东西,即结构化和过程式编程。
结构化程序设计–
结构化编程方法的基本原理是将程序分为功能和模块。模块和功能的使用使程序更易于理解和阅读。它有助于编写更简洁的代码,并保持对功能和模块的控制。这种方法重视功能而不是数据。它专注于大型软件应用程序的开发,例如,C用于现代操作系统开发。编程语言:PASCAL(由Niklaus Wirth引入)和C(由Dennis Ritchie引入)遵循这种方法。
程序化编程方法–
这种方法也称为自上而下的方法。在这种方法中,程序分为执行特定任务的功能。此方法主要用于中型应用程序。数据是全局的,所有功能都可以访问全局数据。程序编程方法的基本缺点是数据不安全,因为数据是全局的,并且可以由任何函数访问。程序控制流程是通过函数调用和goto语句实现的。编程语言:FORTRAN(由IBM开发)和COBOL(由Grace Murray Hopper博士开发)遵循这种方法。
这些编程结构是在1970年代末和1980年代开发的。这些语言虽然满足了结构良好的程序,软件等的标准,但仍然存在一些问题。它们的结构不如当时的要求。它们似乎过于笼统,与实时应用程序无关。
为了解决这类问题,开发了面向对象的方法OOP作为解决方案。
面向对象编程(OOP)方法–
OOP的概念基本上是为克服上述编程方法的缺陷而设计的,该方法与现实世界中的应用不太接近。需求增加了,但是仍然使用常规方法。这种新方法带来了编程方法学领域的一场革命。
面向对象编程(OOP)就是什么,它允许在某些类和实时对象的帮助下编写程序。我们可以说这种方法与现实世界及其应用非常接近,因为这些类和对象的状态和行为与现实世界对象几乎相同。
让我们更深入地介绍OOP的一般概念,如下所示:
什么是类和对象?
这是OOP的基本概念; C语言中使用的结构的扩展概念。它是抽象的且用户定义的数据类型。它由几个变量和函数组成。该类的主要目的是存储数据和信息。类的成员定义类的行为。类是对象的蓝图,但是,我们可以说类的实现是对象。该类对世界不可见,但对象可见。
Class car
{
int car_id;
char colour[4];
float engine_no;
double distance;
void distance_travelled();
float petrol_used();
char music_player();
void display();
}
在这里,类汽车具有属性car_id,颜色,engine_no和距离。它类似于具有相同规格的现实世界中的汽车,可以将其声明为公开(对班级以外的所有人可见),受保护和私有(对任何人都不可见)。另外,还有一些方法,例如distance_travelled(),petrol_used(),music_player()和display()。在下面给出的代码中,汽车是类,而c1是汽车的对象。
#include
using namespace std;
class car {
public:
int car_id;
double distance;
void distance_travelled();
void display(int a, int b)
{
cout << "car id is=\t" << a << "\ndistance travelled =\t" << b + 5;
}
};
int main()
{
car c1; // Declare c1 of type car
c1.car_id = 321;
c1.distance = 12;
c1.display(321, 12);
return 0;
}
数据抽象–
抽象是指代表重要特征和特殊特征而不包含背景细节或对该特征的解释的行为。数据抽象简化了数据库设计。
- 身体水平:
它描述了记录的存储方式,而这些记录通常对用户是隐藏的。可以用短语“存储块”来描述。 - 逻辑级别:
它描述了存储在数据库中的数据以及数据之间的关系。程序员通常在此级别上工作,因为他们知道维护数据之间的关系所需的功能。 - 查看级别:
应用程序出于安全目的隐藏数据类型和信息的详细信息。此级别通常在GUI的帮助下实现,并显示了针对用户的详细信息。
封装–
封装是面向对象编程(OOP)中的基本概念之一。它描述了包装数据的思想以及在一个单元(例如Java的类)内处理数据的方法。此概念通常用于从外部隐藏对象的内部状态表示。
继承–
继承是一个类继承父类的另一个类的功能或属性的能力。当我们编写一个类时,我们从其他类继承属性。因此,当我们创建一个类时,我们不需要一次又一次地编写所有属性和函数,因为它们可以从拥有它的另一个类中继承。继承使用户可以在可能的情况下重用代码并减少其冗余。
import java.io.*;
class GFG {
public static void main(String[] args)
{
System.out.println("GfG!");
Dog dog = new Dog();
dog.name = "Bull dog";
dog.color = "Brown";
dog.bark();
dog.run();
Cat cat = new Cat();
cat.name = "Rag doll";
cat.pattern = "White and slight brownish";
cat.meow();
cat.run();
Animal animal = new Animal();
animal.name = "My favourite pets";
animal.run();
}
}
class Animal {
String name;
public void run()
{
System.out.println("Animal is running!");
}
}
class Dog extends Animal {
/// the class dog is the child and animal is the parent
String color;
public void bark()
{
System.out.println(name + " Wooh ! Wooh !"
+ "I am of colour " + color);
}
}
class Cat extends Animal {
String pattern;
public void meow()
{
System.out.println(name + " Meow ! Meow !"
+ "I am of colour " + pattern);
}
}
多态性–
多态是指以多种形式处理数据的能力。它允许以各种方式执行同一任务。它由方法重载和方法重写组成,即,一次编写方法并使用相同的方法名称执行许多任务。
#include
using namespace std;
void output(float);
void output(int);
void output(int, float);
int main()
{
cout << "\nGfG!\n";
int a = 23;
float b = 2.3;
output(a);
output(b);
output(a, b);
return 0;
}
void output(int var)
{ // same function name but different task
cout << "Integer number:\t" << var << endl;
}
void output(float var)
{ // same function name but different task
cout << "Float number:\t" << var << endl;
}
void output(int var1, float var2)
{ // same function name but different task
cout << "Integer number:\t" << var1;
cout << " and float number:" << var2;
}
有关OOP的一些重要知识:
- OOP将数据视为关键要素。
- 重点是数据而不是程序。
- 将问题分解为更简单的模块。
- 不允许数据在整个系统中自由流动,即局部控制流。
- 数据受到外部功能的保护。
OOP的优势–
- 它很好地模拟了现实世界。
- 使用OOP,程序易于理解和维护。
- OOP提供代码可重用性。已经创建的类可以重复使用,而不必再次编写它们。
- OOP促进了可以并行开发类的程序的快速开发。
- 使用OOP,程序更易于测试,管理和调试。
OOP的缺点–
- 使用OOP时,有时会过度概括类。
- 阶级之间的关系有时变得肤浅。
- OOP设计很棘手,需要适当的知识。另外,需要对OOP编程进行适当的规划和设计。
- 要使用OOP进行编程,程序员需要适当的技能,例如根据对象和类等进行设计,编程和思考的技能。