Java之面向对象思想

OOP介绍

OOP全称Object Oriented Programming,是指面向对象程序设计,是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。面向对象编程就是定义这些类。

OOP四大原则

这些是基金会的基础。共同形成面向对象的编程范式的 4 个主要特征。了解它们对于成为一名成功的程序员至关重要。

原则 1.继承
***继承***是一种机制,允许您根据现有(父)类描述新类。这样做,新类借用了母班的属性和功能。什么是继承,它提供了什么优势?最重要的是,代码重用。家长班中宣布的字段和方法可用于后代类。如果所有类型的汽车都有 10 个通用字段和 5 个相同的方法,则只需将其移入父类。您可以在后代类中使用它们,没有任何问题。固有优势:定量(较少代码)和定性(类变得简单得多)。此外,继承是非常灵活的-你可以添加写单独的功能,后代丢失(一些领域或行为是特定于特定类别)。总的来说,就像在现实生活中一样,我们都和父母有些相似,但和他们有些不同:)Auto
原则 2.抽象
这是一个非常简单的原则。抽象意味着识别事物的主要、最重要的特征,同时丢弃任何次要和微不足道的东西。无需重新发明车轮。让我们回顾一下关于课程的旧课的一个例子。假设我们正在为公司员工创建一个归档系统。要创建"员工"对象,我们编写了一个类。在公司备案系统中,描述它们有哪些重要特征?姓名出生日期*、SSN员工 ID。但是,对于此类记录,我们不太可能需要员工的身高、眼睛颜色或头发颜色。公司不需要有关员工的此类信息。因此,在类中,我们声明以下变量:,,,和。我们抽象掉不必要的信息,如眼睛的颜色。但是,如果我们为建模机构建立备案系统,情况将发生巨大变化。模特的身高*、眼睛颜色头发颜色是重要特征,但她的SSN与我们完全无关。因此,在类中,我们创建以下变量:,。
原则 3.封装(之前为三大原则,封装时后来加的)
我们已经碰到这个了在 Java 中,封装意味着限制读取和更改数据的能力。正如你所看到的,这个词是基于"胶囊"这个词。我们将使用"胶囊"来隐藏一些我们不希望其他人更改的重要数据。这里有一个简单的例子,从现实生活中。你有名字和姓氏。你所有的朋友都认识他们但他们没有能力更改您的名字或姓氏。我们可以说,这样做的过程是由法院系统"封装"的:你只能通过法院书记员更改你的姓,只有你能做到。其他"用户"可以"仅读"访问您的姓名和姓氏:)另一个说明性的例子是家里存放的现金。把它放在房间中间的视线中不是个好主意。任何"用户"(来你家的人)都可以改变你的钱,即他们可以拿走你的钱。最好把它封装在保险箱里。然后,访问将只提供给您,并且只能使用特殊代码。您已经使用过的封装的明显示例是访问修饰符(私人公共等),以及设置器和获取器。如果您没有封装类的字段,那么任何人都可以写到:封装机制允许我们使用设置器方法保护字段,在那里我们可以确保年龄不会设置为负数。
原则4.多 态 性
***多态性***是能够与多种类型一起工作,就好像它们是同一类型一样。此外,对象的行为会因类型而异。听起来很复杂吗?现在让我们来理解一下。以最简单的例子为例:动物。创建一个带有单种方法和两个子类的类-和。 现在,我们将尝试声明一个参考变量并分配一个对象。 你认为什么方法会被称为? 或?班里的方法叫:*狼!*我们创建了一个参考,但对象的行为就像一个。如有必要,它可以像猫,马,或其他一些动物的行为。重要的是给一般参考变量分配一个特定的子类。这是有道理的,因为所有的狗都是动物。这就是我们在说"对象的行为会因其类型而异"时所想的。如果我们创建了一个对象。。。 该方法将显示"*草!*但是,我们所说的"能够与多种类型合作,就好像它们是同一类型一样"是什么意思呢?这也非常简单。让我们想象一下,我们正在为动物创建一个理发店。我们的理发店应该能够给任何动物修剪,所以我们创建了一个参数(动物理发)的方法。 现在我们可以通过和对象的方法! 下面是一个明显的例子:该类与类型一起工作,就好像它们是同一类型一样。同时,他们有不同的行为:他们每个人说话的方式不同。Animal``speak()``Cat``Dog
public class Animal {

   public void speak() {

       System.out.println("Hello!");
   }
}

public class Dog extends Animal {

   @Override
   public void speak() {
       System.out.println ("Woof-woof!");
   }
}

public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}
Animal``Dog
public class Main {

   public static void main(String[] args) {

       Animal dog = new Dog();
       dog.speak();
   }
}
Animal.speak()``Dog.speak()``Dog``Animal``Dog``Animal``Cat
public static void main(String[] args) {

   Animal cat = new Cat();
   cat.speak();
}
speak()``trim()``Animal
public class AnimalBarbershop {

   public void trim(Animal animal) {

       System.out.println("The haircut is done!");
   }
}
Cat``Dog``trim()
public static void main(String[] args) {

   Cat cat = new Cat();
   Dog dog = new Dog();

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.trim(cat);
   barbershop.trim(dog);
}
AnimalBarbershop``Cat``Dog``Cat``Dog

为什么需要OOP?

为什么***OOP***甚至会作为一个新的编程概念出现?程序员有功能的工具,如程序语言。是什么促使他们发明了一些全新的东西?最重要的是,他们面临的任务的复杂性。如果说60年前程序员的任务就像是"评估一些数学表达",那么现在它就像"根据玩家在游戏中A、B、C、D E和F点做出的决定的组合,为游戏实现7个不同的结局"。正如你所看到的,在过去的几十年里,任务显然变得更加复杂。因此,数据类型变得更加复杂。这是OOP出现的另一个原因。数学表达可以很容易地使用普通原始语进行评估。此处不需要对象。但是,如果不使用自定义类,游戏结束的任务将很难描述。也就是说,使用类和对象来描述它是很容易的。显然,我们需要几个类:游戏跟踪者结束玩家决定游戏事件,等等。换句话说,即使没有开始解决问题,我们也可以很容易地"勾勒出"我们头脑中的解决方案。任务越来越复杂,迫使程序员将它们分成两部分。但是,在程序编程中,这并非易事。很多时候,一个程序就像一棵树,有很多分支代表所有可能的执行路径。根据特定条件,执行了程序的一个分支或另一个分支。对于小型程序,这很方便,但很难将大问题分成几个部分。这是OOP出现的另一个原因。这种范式使程序员能够将程序分成一堆"模块"(类),每个模块都做自己的部分工作。通过相互交互,所有对象都完成了我们程序的工作。此外,我们可以在程序的其他地方重复使用我们的代码,这也节省了大量的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿杜吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值