解释面向对象编程的更好方法是考虑实时数据对象中的 OOP。它是一种基于现实世界对象及其交互的想法来构建和设计代码的方法。在 OOP 中,数据和对该数据进行操作的方法一起封装到对象中。
面向对象编程的主要特点:
抽象:只显示必要的内容。
多态性:不止一种形式:一个对象在不同级别上的行为可能不同。
继承:父类和子类关系。
封装:隐藏复杂性。
类和对象:类是包含数据成员和方法的类型或蓝图,对象是实例。
现在让我们借助用称为 c# 的编程语言编写的代码清楚地理解每个概念。
我们将考虑银行管理系统的例子。
抽象:使用 C# 中的抽象和接口功能,定义抽象。
在 C 语言中使用摘要#
public class Customer
{
public string Name {get;set;}
public string CustomerId {get; set;}
public string Address {get; set;}
public void TotalAmount()
{
// this method calculate the total amount present in the customer account
}
}
在上面的代码中,TotalAmount() 将来自不同的来源,因为客户可以拥有不同类型的账户,如储蓄账户、活期账户、支票账户。所以我们只需要在这里展示必要的东西.下面是抽象类的 c# 代码。
public abstract class Customer
{
public string Name {get; set;}
public string CustomerId {get; set;}
public string Address {get; set;}
public Decimal TotalAmount {get; set;}
public abstract void TotalAmount();
}
public class SavingsAccount : Customer
{
public override void TotalAmount()
{
//logic to calculate the amount here
}
}
public class CurrentAccount : Customer
{
public override void TotalAmount()
{
//logic to calculate the amount here
}
}
Customer 类被声明为抽象类,并且只应用方法签名而不实现它,方法实现部分是在派生抽象类的类中完成的,SavingsAccount 和 CurrentAccount 类继承自抽象及其方法被标记为重写,因为默认情况下抽象类中的成员是虚拟的,由子类成员覆盖。
我们可以根据自己的要求调用该方法,因此在最终的 Customer 类中,我们只显示要向最终用户显示的必需属性,计算部分他不需要在后端业务逻辑中应用其他东西。
public static void Main()
{
Customer c1 = new SavingsAccount();
c1.Calculate();
Customer c2 = new CurrentAccount();
c2.Calculate();
}
当我们在基类和实现类之间发生继承的情况时,使用抽象类,如果普通类具有相同的行为,那么我们将选择接口概念,它也是一种抽象。
在 c# 中使用 Interface:
考虑同样的例子——假设我们需要显示 Customer 分支信息,为了在后端获取分支信息,我们实现了一些业务逻辑来获取分支详细信息。
这里也对最终用户隐藏了不需要的详细信息,只有我们需要什么,我们才会看到。
何时使用该界面?当在代码中的其他位置使用任何常见行为时,就会使用接口,然后使用接口,当存在基类和子类关系时,我们可以使用抽象类。这完全取决于项目的要求。
就像开发库时一样,抽象很有用,因为它将在代码的其他部分使用或实现,接口就像是段级任务的即插即用。
下面是实现接口和抽象的修改后的代码。
using System;
namespace C_sharpbasics
{
public abstract class Customer
{
public Customer()
{
}
public string Name { get; set; }
public string Address { get; set; }
public decimal TotalAmt { get; set; }
public abstract int CalTotAmount();
}
public class SavingsAccount : Customer, IBankBranch
{
public override int CalTotAmount()
{
//login to display amount
return 2000;
}
public string GetBranchAddress()
{
return "India";
}
}
public class CurrentAccount : Customer ,IBankBranch
{
public override int CalTotAmount()
{
//login to display amount
return 6000;
}
public string GetBranchAddress()
{
return "Japan";
}
}
}
封装 :
将数据打包到一个单元中。封装隐藏了对象实现方式的复杂性。面向对象编程 (OOP) 中的封装是一种向其他对象和外部世界隐藏对象内部细节(实现)的机制。它是 OOP 的四个基本原则之一,另外还有继承、多态和抽象。封装允许对象控制对其数据和方法的访问,这可以提高系统的安全性和稳定性。在 OOP 中,封装通常是通过使用访问修饰符(如“private”和“protected”)来实现的,这些修饰符限制对类的某些成员的访问。
实现抽象的机制是封装
继承(派生类和基类)
继承允许我们根据另一个类来定义一个类,这使得创建和维护应用程序变得更加容易。这也提供了重用代码功能的机会,并加快了实现时间。
创建类时,程序员可以指定新类应继承现有类的成员,而不是编写全新的数据成员和成员函数。此现有类称为基类,新类称为派生类。
继承的思想实现了 IS-A 关系。例如,哺乳动物是动物,狗是哺乳动物,因此狗也是动物,依此类推。
public class Parent
{
public string Method1()
{
}
}
public class Child :Parent
{
public string Method2()
{
}
}
现在子类可以访问父类方法和它自己的方法。
多态性
多态性意味着分配一个名称,但可以有多种行为。这意味着函数的名称相同,但其定义不同。
多态性意味着单个名称和多重含义,每当我们尝试访问该特定名称时,该调用之间必须绑定该函数。因此,有两种类型的绑定可以调用该函数。
Method 重载 — 编译时
方法重写 — 运行时
C# 访问修饰符