抽象方法

六大设计原则(C#)

狂风中的少年 提交于 2019-11-27 18:34:31
为什么要有设计原则,我觉得一张图片就可以解释这一切 一、单一职责原则(SRP) 对于一个类而言,应该只有一个发生变化的原因。(单一职责不仅仅是指类) 如果一个模块需要修改,它肯定是有原因的,除此原因之外,如果遇到了其他情况,还需要对此模块做出修改的话,那么就说这个模块就兼具多个职责。举个栗子: 此时我们有个动物类Animal,有个Move()会移动的方法 public class Animal { //动物移动的方法 public void Move(String name) { Console.WriteLine($"动物{name}跑"); } } class Program { static void Main(string[] args) { Animal a = new Animal(); a.Move("狗"); Console.ReadKey(); } } 此时如果传入一个鱼进去就不太合适了,因为鱼是不会跑只会游的 a.Move("鱼"); 此时我们需要兼顾两个职责,第一个就是普通动物移动的方法,第二个就是鱼类的移动方法。我们修改一下,让这一切变得合理一些 第一种 public class Animal { //动物移动的方法 public void Move(String name) { if (name == "狗") { Console.WriteLine($

实验楼第二次实验

冷暖自知 提交于 2019-11-27 18:19:29
实验二 Java面向对象程序设计 ( 由于网速不好,实验楼的光标反映过慢,所以代码的调适与运行都是在电脑的Eclipse 里面完成的,没在实验楼里截图) 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O.L.I.D 了解设计模式 先在实验楼中的~/Code目录中 用自己学号建立一个目录 ,用于存放代码和UML图 实验步骤 (一) 单元测试 (1) 三种代码 想用程序解决问题时,要会写三种代码 l 伪代码 l 产品代码 l 测试代码 举例: 需求:我们要在一个 MyUtil 类中解决一个百分制成绩转成“优、良、中、及 格、不及格”五级制成绩的功能 l 伪代码(伪代码与具体编程语言无关,不要写与具体编程语言语法相关的语句, 伪代码 从意图层面来解决问题,最终, 伪代码 是 产品代码 最自然的、最好的注释) l 产品代码(把伪代码用Java语言翻译一下) l 测试代码(写了 产品代码 ,我们还要写 测试代码 ,证明自己的代码没有问题。Java编程时,程序员对类实现的测试叫 单元测试 。类 XXXX 的 单元测试 ,一般写建一个 XXXXTest 的类,针对 MyUtil 类写一个 MyUtilTest.java 的测试模块,代码如下) 这里我们设计了一个 测试用例(Test Case) , 测试用例 是

23种设计模式详解

牧云@^-^@ 提交于 2019-11-27 17:59:48
原文链接: http://blog.csdn.net/zhangerqing 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 二、设计模式的六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说 对扩展开放,对修改关闭 。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。 1、单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。 2、里氏替换原则(Liskov Substitution Principle) 里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互

java 四大特性

偶尔善良 提交于 2019-11-27 16:05:22
一.类和对象: 类:是一类事物特征抽象的集合,表示一个共性的产物, 类中包括 属性(静态属性) 和 方法(动态属性) 注: 类中属性和方法也可以没有!!! 对象 :是类的实例, 是抽象的具体化, 类定义完成后不能直接使用, 如果要使用,必须在(main)主方法中创建对象…由于类属于引用数据类型, 所以对象的产生格式如下: 语法: 声明并实例化对象 类名称 对象名称 = new 类名称(); 当一个实例化对象产生之后,可以按照如下的方式进行类的操作: 对象.属性:表示调用类之中的属性; 对象.方法():表示调用类之中的方法。 ========================================================================================================================== 二, 封装 概念: 隐藏对象的属性和细节,仅对外提供公共的方法进行访问 a).当类的成员变量使用private 修饰符修饰, 就不可以直接访问到该成员变量 b). 当使用private修饰的成员变量或者成员方法,仅能在本类中使用 c).private 对于main方法的修饰,也可以产生作用. 语法: private 数据类型 变量名; 设置get和set方法; set设置属性, get获取属性值 三,继承 1.关键字

接口和抽象的区别理解

£可爱£侵袭症+ 提交于 2019-11-27 15:42:36
在abstract class方式中,可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,只能够有静态的 不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊 形式的abstract class。 抽象方法与抽象类: 当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。(摘自百度文库:java抽象类和方法,作者:余书慧先生) 抽象方法与接口: 在interface中所有的方法都是public abstract的,即使你没有申明它是public abstract的。在interface中所有的数据成员都是public static final的,即使你没有申明.但不能是blank final 在编译时候确定的。在Java中

Java 抽象类

不打扰是莪最后的温柔 提交于 2019-11-27 14:38:28
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 抽象类 在Java语言中使用abstract class来定义抽象类。如下实例: Employee.java 文件代码: /* 文件名 : Employee.java */ public abstract class Employee { private String name; private String address; private int number; public Employee(String name, String address, int number) { System.out.println("Constructing an Employee"); this.name = name; this

走进JavaWeb技术世界3:JDBC的进化与连接池技术

﹥>﹥吖頭↗ 提交于 2019-11-27 13:46:52
走进JavaWeb技术世界3:JDBC的进化与连接池技术 编辑 删除 黄小斜 2017-08-29 14:43:13 浏览566 java mysql 线程 数据库 tomcat JDBC Driver javaweb 微信公众号【黄小斜】大厂程序员,互联网行业新知,终身学习践行者。关注后回复「Java」、「Python」、「C++」、「大数据」、「机器学习」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「笔试」、「面试」、「面经」、「计算机基础」、「LeetCode」 等关键字可以获取对应的免费学习资料。 ​ 网络访问 随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库村, 这里呈现出一片兴旺发达的景象, 无数的程序在村里忙忙碌碌, 读写数据库, 实际上一个村落已经容不下这么多人了, 数据库村变成了数据镇。 这一天, 数据库镇发生了一件大事: 它连上了网络! 外部的花花世界一下全部打开, 很多程序开始离开这个拥挤的城镇, 住到更加宜居的地方去。 可是他们的工作还是要读写数据库, 大家都在想办法能不能通过网络来访问数据库镇的数据库。 其中移居到Tomcat村的Java 最为活跃, 这小子先去拜访了一下Mysql , 相对于Oracle, Sybase 等大佬, Mysql

42 python - 类和对象

谁说胖子不能爱 提交于 2019-11-27 12:59:11
1. 类 人以类聚 物以群分。 具有相似内部状态和运动规律的实体的集合(或统称为抽象)。 具有相同属性和行为事物的统称 类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。一个类可以找到多个对象。 2.对象 某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。 可以是直接使用的 3. 类和对象之间的关系 类就是创建对象的模板 4.类的构成 类(Class) 由3个部分构成 类的名称:类名 类的属性:一组数据 类的方法:允许对进行操作的方法 (行为) 。。。。。。类似于Java,此处不再详细描述。 来源: https://blog.csdn.net/qq_20042935/article/details/99678289

父类上的注解能被子类继承吗

﹥>﹥吖頭↗ 提交于 2019-11-27 12:11:42
转载 https://www.cnblogs.com/chenkeyu/p/7895751.html 我们知道在编写自定义注解时,可以通过指定@Inherited注解,指明自定义注解是否可以被继承。但实现情况又可细分为多种。 测试环境如下: 父类的类上和方法上有自定义的注解--MyAnnotation 子类继承了这个父类,分别: 子类方法,实现了父类上的抽象方法 子类方法,继承了父类上的方法 子类方法,覆盖了父类上的方法 测试代码: public class TestInherited { // @Inherited //可以被继承 @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) //可以通过反射读取注解 public @interface MyAnnotation { String value(); } @MyAnnotation(value = "类名上的注解") public abstract class ParentClass { @MyAnnotation(value = "父类的abstractMethod方法") public abstract void abstractMethod(); @MyAnnotation(value = "父类的doExtends方法") public void

java设计模式--模板方法模式

六月ゝ 毕业季﹏ 提交于 2019-11-27 06:22:27
模板方法模式   模板方法模式是设计模式是类的行为模式,意图定义一个算法的骨架,而将一些不通用的步骤延迟到子类中,模板方法模式使得子类可以不重新定义一个算法的整体框架而改变某些步骤的实现。例如,我们将钱存在银行中,分为定期存储和活期存储,两种存储方式的计算规则类似,但是仅仅是计算方式不同而已,这样我就不需要定义两个类分别计算定期存储和活期存储之后的余额,使用模板方法模式则是将通用的计算过程抽象到一个抽象类,不通用的计算过程通过两个子类分别计算即可,这样也减少了代码量,去除了重复性代码。 模板方法模式的适用性 一次性实现一个算法的不变部分,将可变的行为留给子类去实现。 各子类中的公共行为应该抽取出来放到一个公共的类中,避免代码的重复。 模板方法模式的结构图 模板方法模式中包含的角色看起来比较简单,只有两类角色: 1、抽象类(AbstractClass):抽象类中可以包含模板方法、抽象方法、钩子方法,其中模板方法是不需要被实现的,钩子方法是可选择被实现的,抽象方式是需要被实现的。 2、具体类(ConcreteClass):实现抽象类中的抽象方法,完成算法的中特定步骤。 模板方法模式示例   首先定义抽象类,在模板方法中执行具有公共特征的操作。 public abstract class AbstractClass { /*模板方法,不需要子类实现*/ public final void