黑马程序员 面向对象的概念

本文介绍了面向对象编程的基础概念,包括封装、继承、抽象类及多态等特性,通过具体示例帮助理解面向对象的设计原则。

------- android培训java培训、期待与您交流! ----------

面向对象:

特点:1:将复杂的事情简单化。
   2:面向对象将以前的过程中的执行者,变成了指挥者。
   3:面向对象这种思想是符合现在人们思考习惯的一种思想。

封装(面向对象特征之一):

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
this:代表对象。就是所在函数所属对象的引用。
this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。
开发时,什么时候使用this呢?
在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用this来表示这个对象。
this 还可以用于构造函数间的调用。
调用格式:this(实际参数);
this对象后面跟上 .  调用的是成员属性和成员方法(一般方法);
this对象后面跟上 () 调用的是本类中的对应参数的构造函数。
注意:用this调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所以初始化动作一定要执行。否则编译失败。

继承(面向对象特征之一)

好处:
  1:提高了代码的复用性。
  2:让类与类之间产生了关系,提供了另一个特征多态的前提。
父类的由来:其实是由多个类不断向上抽取共性内容而来的。
java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。
单继承:一个类只能有一个父类。
多继承:一个类可以有多个父类。
为什么不支持多继承呢?
  因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。
  但是java支持多重继承。A继承B  B继承C  C继承D。
  多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。
  所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。

抽象类的特点:

   1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。
   2:抽象方法只定义方法声明,并不定义方法实现。
   3:抽象类不可以被创建对象(实例化)。
   4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

多态(面向对象特征之一):

函数本身就具备多态性,某一种事物有不同的具体的体现。

体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat();
多态的好处:提高了程序的扩展性。
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态的前提:
 1:必须要有关系,比如继承、或者实现。
 2:通常会有覆盖操作。
多态的出现思想上也做着变化:以前是创建对象并指挥对象做事情。有了多态以后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或接口实现。

通过张老师的视频,有那么比较熟悉的面向对象的例子
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法

例子:

(1)人在黑板上画圆。

总的有三个对象:personblackboardcircle

画圆需要圆心和半径。所以draw();方法是圆身上的。

人发出画圆的信号。黑板是载体。圆拥有画圆的方法。

(2)列车司机紧急刹车

列车司机发出信号刹车。列车自己提供刹车方法。因为只有列车知道怎么样刹车。

(3)售货员统计售货小票的金额

售货员只是得到了总金额。是小票自己提供的方法。

(4)你把门关上了。

人只是发出关门的信号。关门的动作是门自己提供的。

面向对象的面试题,用面向对象的方式设计如下情景:

两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子。

package ObjectOriented;

/*
 * 石刀生成工厂
 */
public class KnifeFactory {
	public StoneKnife createKnife(Stone first,Stone second){
		 return new StoneKnife();
	}

}

package ObjectOriented;

/*
 * 石刀类
 */
public class StoneKnife {
	public Material cutTree(StoneKnife sk,Tree tree){
		return new Material();
	}

}

package ObjectOriented;

/*
 * 椅子生成工厂
 */
public class ChairFactory {
	public Chair  makeChair(Material mt){
		return new Chair();
	}

}

.球从一根绳子的一端移动到了另一端。
package ObjectOriented;

public class Ball {
	private Rope rope ;
	private  Point startPoint;
	public Ball(Rope rope, Point startPoint) {
		super();
		this.rope = rope;
		this.startPoint = startPoint;
	}
	public void move(Point startPoint){
		startPoint = rope.nextPoint(startPoint);
		System.out.println("小球移动到了"+startPoint+"处");
	}

}

class Point{
	
}

package ObjectOriented;

//绳子
public class Rope {
	private Point startPoint;
	private Point endPoint;
	public Rope(Point startPoint, Point endPoint) {
		super();
		this.startPoint = startPoint;
		this.endPoint = endPoint;
	}
	public Point nextPoint(Point currentPoint){
		if(currentPoint==endPoint){
			return null;
		}
		return currentPoint;
	}
}






内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值