(1)所有數(shù)據(jù)都應(yīng)該隱藏在所在的類的內(nèi)部。

我們提供的服務(wù)有:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、廉江ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的廉江網(wǎng)站制作公司
(2)類的使用者必須依賴類的共有接口,但類不能依賴它的使用者。
(3)盡量減少類的協(xié)議中的消息。
(4)實(shí)現(xiàn)所有類都理解的最基本公有接口[例如,拷貝操作(深拷貝和淺拷貝)、相等性判斷、正確輸出內(nèi)容、從ASCII描述解析等等].(5)不要把實(shí)現(xiàn)細(xì)節(jié)(例如放置共用代碼的私有函數(shù))放到類的公有接口中。
如果類的兩個(gè)方法有一段公共代碼,那么就可以創(chuàng)建一個(gè)防止這些公共代碼的私有函數(shù)。
(6)不要以用戶無法使用或不感興趣的東西擾亂類的公有接口。
(7)類之間應(yīng)該零耦合,或者只有導(dǎo)出耦合關(guān)系。
也即,一個(gè)類要么同另一個(gè)類毫無關(guān)系,要么只使用另一個(gè)類的公有接口中的操作。
(8)類應(yīng)該只表示一個(gè)關(guān)鍵抽象。
包中的所有類對(duì)于同一類性質(zhì)的變化應(yīng)該是共同封閉的。
一個(gè)變化若對(duì)一個(gè)包影響,則將對(duì)包中的所有類產(chǎn)生影響,而對(duì)其他的包不造成任何影響.(9)把相關(guān)的數(shù)據(jù)和行為集中放置。
設(shè)計(jì)者應(yīng)當(dāng)留意那些通過get之類操作從別的對(duì)象中獲取數(shù)據(jù)的對(duì)象。
這種類型的行為暗示著這條經(jīng)驗(yàn)原則被違反了。
(10)把不相關(guān)的信息放在另一個(gè)類中(也即:互不溝通的行為)。
朝著穩(wěn)定的方向進(jìn)行依賴。
(11)確保你為之建模的抽象概念是類,而不只是對(duì)象扮演的角色。
類應(yīng)當(dāng)統(tǒng)一地共享工作。
(13)在你的系統(tǒng)中不要?jiǎng)?chuàng)建全能類/對(duì)象。
對(duì)名字包含Driver、Manager、System、Susystem的類要特別多加小心。
規(guī)劃一個(gè)接口而不是實(shí)現(xiàn)一個(gè)接口。
(14)對(duì)公共接口中定義了大量訪問方法的類多加小心。
大量訪問方法意味著相關(guān)數(shù)據(jù)和行為沒有集中存放。
(15)對(duì)包含太多互不溝通的行為的類多加小心。
這個(gè)問題的另一表現(xiàn)是在你的應(yīng)用程序中的類的公有接口中創(chuàng)建了很多的get和set函數(shù)。
(16)在由同用戶界面交互的Java面向?qū)ο竽P蜆?gòu)成的應(yīng)用程序中,模型不應(yīng)該依賴于界面,界面則應(yīng)當(dāng)依賴于模型。
(17)盡可能地按照現(xiàn)實(shí)世界建模(我們常常為了遵守系統(tǒng)功能分布原則、避免全能類原則以及集中放置相關(guān)數(shù)據(jù)和行為的原則而違背這條原則).(18)從你的設(shè)計(jì)中去除不需要的類。
一般來說,我們會(huì)把這個(gè)類降級(jí)成一個(gè)屬性。
(19)去除系統(tǒng)外的類。
系統(tǒng)外的類的特點(diǎn)是,抽象地看它們只往系統(tǒng)領(lǐng)域發(fā)送消息但并不接受系統(tǒng)領(lǐng)域內(nèi)其他類發(fā)出的消息。
(20)不要把操作變成類。
質(zhì)疑任何名字是動(dòng)詞或者派生自動(dòng)詞的類,特別是只有一個(gè)有意義行為的類。
考慮一下那個(gè)有意義的行為是否應(yīng)當(dāng)遷移到已經(jīng)存在或者尚未發(fā)現(xiàn)的某個(gè)類中。
(21)我們?cè)趧?chuàng)建應(yīng)用程序的分析模型時(shí)常常引入代理類。
在設(shè)計(jì)階段,我們常會(huì)發(fā)現(xiàn)很多代理沒有用的,應(yīng)當(dāng)去除。
(22)盡量減少類的協(xié)作者的數(shù)量。
一個(gè)類用到的其他類的數(shù)目應(yīng)當(dāng)盡量少。
(23)盡量減少類和協(xié)作者之間傳遞的消息的數(shù)量。
(24)盡量減少類和協(xié)作者之間的協(xié)作量,也即:減少類和協(xié)作者之間傳遞的不同消息的數(shù)量。
(25)盡量減少類的扇出,也即:減少類定義的消息數(shù)和發(fā)送的消息數(shù)的乘積。
(26)如果類包含另一個(gè)類的對(duì)象,那么包含類應(yīng)當(dāng)給被包含的對(duì)象發(fā)送消息。
也即:包含關(guān)系總是意味著使用關(guān)系。
(27)類中定義的大多數(shù)方法都應(yīng)當(dāng)在大多數(shù)時(shí)間里使用大多數(shù)數(shù)據(jù)成員。
(28)類包含的對(duì)象數(shù)目不應(yīng)當(dāng)超過開發(fā)者短期記憶的容量。
這個(gè)數(shù)目常常是6.當(dāng)類包含多于6個(gè)數(shù)據(jù)成員時(shí),可以把邏輯相關(guān)的數(shù)據(jù)成員劃分為一組,然后用一個(gè)新的包含類去包含這一組成員。
(29)讓系統(tǒng)功能在窄而深的繼承體系中垂直分布。
(30)在實(shí)現(xiàn)語義約束時(shí),最好根據(jù)類定義來實(shí)現(xiàn)。
這常常會(huì)導(dǎo)致類泛濫成災(zāi),在這種情況下,約束應(yīng)當(dāng)在類的行為中實(shí)現(xiàn),通常是在構(gòu)造函數(shù)中實(shí)現(xiàn),但不是必須如此。
(31)在類的構(gòu)造函數(shù)中實(shí)現(xiàn)語義約束時(shí),把約束測(cè)試放在構(gòu)造函數(shù)領(lǐng)域所允許的盡量深的包含層次中。
(32)Java面向?qū)ο笾校s束所依賴的語義信息如果經(jīng)常改變,那么最好放在一個(gè)集中式的第3方對(duì)象中。
(33)約束所依賴的語義信息如果很少改變,那么最好分布在約束所涉及的各個(gè)類中。
(34)類必須知道它包含什么,但是不能知道誰包含它。
(35)共享字面范圍(也就是被同一個(gè)類所包含)的對(duì)象相互之間不應(yīng)當(dāng)有使用關(guān)系。
(36)繼承只應(yīng)被用來為特化層次結(jié)構(gòu)建模。
(37)派生類必須知道基類,基類不應(yīng)該知道關(guān)于它們的派生類的任何信息。
(38)基類中的所有數(shù)據(jù)都應(yīng)當(dāng)是私有的,不要使用保護(hù)數(shù)據(jù)。
電腦培訓(xùn)認(rèn)為類的設(shè)計(jì)者永遠(yuǎn)都不應(yīng)該把類的使用者不需要的東西放在公有接口中。
(39)在理論上,繼承層次體系應(yīng)當(dāng)深一點(diǎn),越深越好。
(40)在實(shí)踐中,繼承層次體系的深度不應(yīng)當(dāng)超出一個(gè)普通人的短期記憶能力。
一個(gè)廣為接受的深度值是6.(41)所有的抽象類都應(yīng)當(dāng)是基類。
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("生成數(shù)組如下: ");
for(int i: dist) {
System.out.print(i + "\t");
}
java.util.Scanner san = new java.util.Scanner(System.in);
System.out.print("輸入要查找的數(shù): ");
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);
}
}
自己寫的,也才學(xué)不容易還望采納
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("當(dāng)年齡無效時(shí),默認(rèn)為18");
}else{
this.age =age;
}
}
public int getAge() {
return age;
}
/**
* 給position屬性賦值
* @param position
*/
public void setPosition(String position){
if(position.equals("售后服務(wù)") || position.equals("銷售員") ){
this.position = position;
}else{
this.position = "售后服務(wù)";
System.out.println("輸入不符合要求,默認(rèn)為售后服務(wù)");
}
}
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("沒有設(shè)置年齡或者年齡無效");
}
}
public int getSalary() {
return salary;
}
}
測(cè)試類
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("請(qǐng)輸入第一個(gè)員工姓名");
//獲取輸入的名字
String name1 = sc.next();
emp1.setName(name1);
System.out.println("請(qǐng)輸入第一個(gè)員工年齡");
//獲取輸入的年齡
int age1 = sc.nextInt();
emp1.setAge(age1);
System.out.println("請(qǐng)輸入第一個(gè)員工職位");
//獲取輸入的職位
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+"個(gè)人組隊(duì)");
}
}
主函數(shù) :
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("請(qǐng)輸入玩家姓名:");
Scanner sc=new Scanner(System.in);
String str=sc.next();
System.out.println("請(qǐng)選擇服務(wù)器:(1.聯(lián)通,2.電信,3.鐵通,4.國(guó)外):");
Scanner sc1=new Scanner(System.in);
int num=sc1.nextInt();
System.out.println("請(qǐng)輸入游戲等級(jí):(輸入 0 默認(rèn))");
Scanner sc2=new Scanner(System.in);
int lever=sc2.nextInt();
if(lever0){
lever=0;
}
switch(num){
case 1:
arr[i]=new NetGame(str,"聯(lián)通",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,"國(guó)外",lever);
break;
default:
arr[i]=new NetGame(str,"聯(lián)通",lever);
break;
}
}
for(int i=0;i3;i++){
System.out.println(arr[i].getProperty());
System.out.println("請(qǐng)輸入最少組團(tuán)人數(shù):");
Scanner sc3=new Scanner(System.in);
int person=sc3.nextInt();
arr[i].groupNum(person);
}
}
}
分享題目:java面向?qū)ο蠡A(chǔ)代碼,java面向?qū)ο蠡A(chǔ)知識(shí)
文章路徑:http://chinadenli.net/article7/dsgdjoj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、域名注冊(cè)、關(guān)鍵詞優(yōu)化、ChatGPT、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)