扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
(1)所有数据都应该隐藏在所在的类的内部。
我们提供的服务有:网站制作、网站设计、微信公众号开发、网站优化、网站认证、廉江ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的廉江网站制作公司
(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。
(3)尽量减少类的协议中的消息。
(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等].(5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。
如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。
(6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。
(7)类之间应该零耦合,或者只有导出耦合关系。
也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。
(8)类应该只表示一个关键抽象。
包中的所有类对于同一类性质的变化应该是共同封闭的。
一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响.(9)把相关的数据和行为集中放置。
设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。
这种类型的行为暗示着这条经验原则被违反了。
(10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。
朝着稳定的方向进行依赖。
(11)确保你为之建模的抽象概念是类,而不只是对象扮演的角色。
类应当统一地共享工作。
(13)在你的系统中不要创建全能类/对象。
对名字包含Driver、Manager、System、Susystem的类要特别多加小心。
规划一个接口而不是实现一个接口。
(14)对公共接口中定义了大量访问方法的类多加小心。
大量访问方法意味着相关数据和行为没有集中存放。
(15)对包含太多互不沟通的行为的类多加小心。
这个问题的另一表现是在你的应用程序中的类的公有接口中创建了很多的get和set函数。
(16)在由同用户界面交互的Java面向对象模型构成的应用程序中,模型不应该依赖于界面,界面则应当依赖于模型。
(17)尽可能地按照现实世界建模(我们常常为了遵守系统功能分布原则、避免全能类原则以及集中放置相关数据和行为的原则而违背这条原则).(18)从你的设计中去除不需要的类。
一般来说,我们会把这个类降级成一个属性。
(19)去除系统外的类。
系统外的类的特点是,抽象地看它们只往系统领域发送消息但并不接受系统领域内其他类发出的消息。
(20)不要把操作变成类。
质疑任何名字是动词或者派生自动词的类,特别是只有一个有意义行为的类。
考虑一下那个有意义的行为是否应当迁移到已经存在或者尚未发现的某个类中。
(21)我们在创建应用程序的分析模型时常常引入代理类。
在设计阶段,我们常会发现很多代理没有用的,应当去除。
(22)尽量减少类的协作者的数量。
一个类用到的其他类的数目应当尽量少。
(23)尽量减少类和协作者之间传递的消息的数量。
(24)尽量减少类和协作者之间的协作量,也即:减少类和协作者之间传递的不同消息的数量。
(25)尽量减少类的扇出,也即:减少类定义的消息数和发送的消息数的乘积。
(26)如果类包含另一个类的对象,那么包含类应当给被包含的对象发送消息。
也即:包含关系总是意味着使用关系。
(27)类中定义的大多数方法都应当在大多数时间里使用大多数数据成员。
(28)类包含的对象数目不应当超过开发者短期记忆的容量。
这个数目常常是6.当类包含多于6个数据成员时,可以把逻辑相关的数据成员划分为一组,然后用一个新的包含类去包含这一组成员。
(29)让系统功能在窄而深的继承体系中垂直分布。
(30)在实现语义约束时,最好根据类定义来实现。
这常常会导致类泛滥成灾,在这种情况下,约束应当在类的行为中实现,通常是在构造函数中实现,但不是必须如此。
(31)在类的构造函数中实现语义约束时,把约束测试放在构造函数领域所允许的尽量深的包含层次中。
(32)Java面向对象中,约束所依赖的语义信息如果经常改变,那么最好放在一个集中式的第3方对象中。
(33)约束所依赖的语义信息如果很少改变,那么最好分布在约束所涉及的各个类中。
(34)类必须知道它包含什么,但是不能知道谁包含它。
(35)共享字面范围(也就是被同一个类所包含)的对象相互之间不应当有使用关系。
(36)继承只应被用来为特化层次结构建模。
(37)派生类必须知道基类,基类不应该知道关于它们的派生类的任何信息。
(38)基类中的所有数据都应当是私有的,不要使用保护数据。
电脑培训认为类的设计者永远都不应该把类的使用者不需要的东西放在公有接口中。
(39)在理论上,继承层次体系应当深一点,越深越好。
(40)在实践中,继承层次体系的深度不应当超出一个普通人的短期记忆能力。
一个广为接受的深度值是6.(41)所有的抽象类都应当是基类。
public class Admins implements Userinterface{
private String name;
private String password;
private static int userNum;
public Admins() {
userNum ++;
}
public Admins(String name, String password) {
this.name = name;
this.password = password;
userNum ++;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return this.password;
}
public String toString() {
return "Total: " + Admins.userNum + "\nName: " + this.name + "\nPassword: " + this.password;
}
public static void main(String [] args) {
Userinterface [] users = new Userinterface[]{new Admins("jeryy", "11111"), new Admins("green", "123123")};
for(Userinterface u: users) {
System.out.println(u);
}
}
}
interface Userinterface{
public void setPassword(String password);
public String getPassword();
public String toString();
}
public class Bins{
public static void main(String [] args) {
int len = 10;
int [] dist = new int [len];
for(int i = 0; i dist.length; i ++) {
dist[i] = (int)(Math.random() * 100);
}
java.util.Arrays.sort(dist);
System.out.println("生成数组如下: ");
for(int i: dist) {
System.out.print(i + "\t");
}
java.util.Scanner san = new java.util.Scanner(System.in);
System.out.print("输入要查找的数: ");
int key = san.nextInt();
int res = Bins.binSearch(dist, key);
//System.out.println(res);
String info = (res =0 ) ? (key + ":" + res) : "查找失败";
System.out.println(info);
}
public static int binSearch(int [] dist, int key) {
java.util.Arrays.sort(dist);
return java.util.Arrays.binarySearch(dist, key);
}
}
自己写的,也才学不容易还望采纳
import java.util.*;
abstract class Shape{
final static double PI=3.14;
public abstract double getPerimeter();
public abstract double getArea();
public static double sumAllArea(Shape []shapes) {
double x=0;
for(Shape e:shapes) {
x+=e.getArea();
}
return x;
}
public static double sumAllPerimeter(Shape []shapes) {
double y=0;
for(Shape e:shapes) {
y+=e.getPerimeter();
}
return y;
}
}
class Rectangle extends Shape{
private int width;
private int length;
public double getPerimeter() {
return 2*(width+length);
}
public double getArea() {
return width*length;
}
public Rectangle(int width,int length) {
this.width=width;
this.length=length;
}
@Override
public String toString() {
return "Rectangle [width=" + width + ", length=" + length + "]";
}
}
class Circle extends Shape{
private int radius;
public double getPerimeter() {
// TODO Auto-generated method stub
return 2*PI*radius;
}
public double getArea() {
// TODO Auto-generated method stub
return PI*radius*radius;
}
public Circle(int radius) {
this.radius=radius;
}
@Override
public String toString() {
return "Circle [radius=" + radius + "]";
}
}
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n;
n=in.nextInt();
Shape shapes[]=new Shape[n];
for(int i=0;in;i++) {
String s=in.next();
switch(s) {
case "rect":
int width,length;
width=in.nextInt();
length=in.nextInt();
shapes[i]=new Rectangle(width, length);
break;
case "cir":
int radius;
radius=in.nextInt();
shapes[i]=new Circle(radius);
break;
}
}
System.out.println(Shape.sumAllPerimeter(shapes));
System.out.println(Shape.sumAllArea(shapes));
System.out.println(Arrays.toString(shapes));
for(int i=0;in;i++) {
System.out.println(shapes[i].getClass()+","+shapes[i].getClass().getSuperclass());
}
}
}
package employee;
public class Employee {
//员工私有属性
private String name; //员工姓名
private int age; //员工年龄
private String position; //员工职位
private int salary; //工资
/**
* 给所有的属性指定初始值
* @param name
* @param age
* @param position
* @param salary
*/
public Employee(String name,int age,String position,int salary){
this.name = name;
this.age =age;
this.position = position;
this.salary = salary;
}
/**
* 给name属性赋值
* @param name
*/
public void setName(String name){
this.name = name;
}
public String getName() {
return name;
}
/**
* 给age属性赋值
* @param age
*/
public void setAge(int age){
if(age18){
this.age=18;
System.out.println("当年龄无效时,默认为18");
}else{
this.age =age;
}
}
public int getAge() {
return age;
}
/**
* 给position属性赋值
* @param position
*/
public void setPosition(String position){
if(position.equals("售后服务") || position.equals("销售员") ){
this.position = position;
}else{
this.position = "售后服务";
System.out.println("输入不符合要求,默认为售后服务");
}
}
public String getPosition() {
return position;
}
/**
* 给员工工资赋值
* @param salary
*/
public void setSalary(){
if(age=18 age=20){
this.salary = 1000;
}else if(age=21 age=25){
this.salary = 1500;
}else if(age=26 age=30){
this.salary = 2000;
}else if(age=31 age=40){
this.salary = 3000;
}else if(age=41 age=50){
this.salary = 3500;
}else if(age=51){
this.salary = 4000;
}else{
System.out.println("没有设置年龄或者年龄无效");
}
}
public int getSalary() {
return salary;
}
}
测试类
package employee;
import java.util.Scanner;
public class TestEmployee {
public static void main(String[] args){
Employee emp1 = new Employee(null, 0, null, 0) ;
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个员工姓名");
//获取输入的名字
String name1 = sc.next();
emp1.setName(name1);
System.out.println("请输入第一个员工年龄");
//获取输入的年龄
int age1 = sc.nextInt();
emp1.setAge(age1);
System.out.println("请输入第一个员工职位");
//获取输入的职位
String position1 = sc.next();
emp1.setPosition(position1);
emp1.setSalary();
System.out.println("---------------------------------");
System.out.println("员工1姓名为:"+emp1.getName());
System.out.println("年龄:"+emp1.getAge());
System.out.println("工作为:"+emp1.getPosition());
System.out.println("工资为:"+emp1.getSalary());
}
}
第一次回答问题,玩玩而已但是还是希望采纳
package playgame;
public class NetGame {
private String gameName;
private String gameServer;
private int gamelevel;
public NetGame(String gameName ,String gameServer ,int gamelevel){
this.gameName=gameName;
this.gameServer=gameServer;
this.gamelevel=gamelevel;
}
public String getProperty(){
String str="gameName="+gameName+",gameServer="+gameServer+"," +
"gamelevel="+gamelevel;
return str;
}
public void groupNum(int person){
System.out.println("该游戏至少需要"+person+"个人组队");
}
}
主函数 :
package playgame;
import java.util.Scanner;
public class TextGame {
public static void main(String[] args) {
NetGame arr[]=new NetGame[3];
for(int i=0;i3;i++){
System.out.println("请输入玩家姓名:");
Scanner sc=new Scanner(System.in);
String str=sc.next();
System.out.println("请选择服务器:(1.联通,2.电信,3.铁通,4.国外):");
Scanner sc1=new Scanner(System.in);
int num=sc1.nextInt();
System.out.println("请输入游戏等级:(输入 0 默认)");
Scanner sc2=new Scanner(System.in);
int lever=sc2.nextInt();
if(lever0){
lever=0;
}
switch(num){
case 1:
arr[i]=new NetGame(str,"联通",lever);
break;
case 2:
arr[i]=new NetGame(str,"电信",lever);
break;
case 3:
arr[i]=new NetGame(str,"铁通",lever);
break;
case 4:
arr[i]=new NetGame(str,"国外",lever);
break;
default:
arr[i]=new NetGame(str,"联通",lever);
break;
}
}
for(int i=0;i3;i++){
System.out.println(arr[i].getProperty());
System.out.println("请输入最少组团人数:");
Scanner sc3=new Scanner(System.in);
int person=sc3.nextInt();
arr[i].groupNum(person);
}
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流