📜  面向对象 |面向对象设计

📅  最后修改于: 2021-10-19 05:22:35             🧑  作者: Mango

面向对象的设计从发明计算机的那一刻就开始了。编程就在那里,编程方法出现了。编程基本上是向计算机发出某些指令。

在计算时代开始时,编程通常仅限于机器语言编程。机器语言是指特定于特定机器或处理器的指令集,它们以 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 具有属性 car_id、color、engine_no 和 distance。它类似于具有相同规格的现实世界汽车,可以声明为公共(对类外的所有人可见)、受保护和私有(对任何人都不可见)。此外,还有一些方法,例如 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;
}

数据抽象——
抽象是指表示重要和特殊特征的行为,但不包括有关该特征的背景细节或解释。数据抽象简化了数据库设计。

  1. 物理水平:
    它描述了记录的存储方式,这些记录通常对用户隐藏。它可以用短语“存储块”来描述。
  2. 逻辑层:
    它描述了存储在数据库中的数据以及数据之间的关系。程序员通常在这个级别工作,因为他们知道维护数据之间的关系所需的功能。
  3. 视图级别:
    应用程序出于安全目的隐藏数据类型和信息的详细信息。此级别通常在 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 的一些要点:

  1. OOP 将数据视为关键元素。
  2. 重点是数据而不是过程。
  3. 将问题分解为更简单的模块。
  4. 不允许数据在整个系统中自由流动,即局部控制流。
  5. 数据受到外部功能的保护。

OOP 的优势——

  • 它很好地模拟了现实世界。
  • 使用 OOP,程序易于理解和维护。
  • OOP 提供代码可重用性。已经创建的类可以重复使用而无需再次编写它们。
  • OOP 促进了程序的快速开发,其中类的并行开发是可能的。
  • 使用 OOP,程序更易于测试、管理和调试。

OOP的缺点——

  • 使用 OOP,类有时会被过度概括。
  • 阶级之间的关系有时变得肤浅。
  • OOP 设计很棘手,需要适当的知识。此外,还需要为 OOP 编程做适当的规划和设计。
  • 要使用 OOP 进行编程,程序员需要适当的技能,例如设计、编程和从对象和类等方面进行思考等。