设计形式六深口径(2):里氏替换原则

设计情势六大条件(2):里氏替换原则 

此处表达,Ubuntu
中网并未了RH系受之
chkconfig 命令

 

可用一些粗器来管理 Ubuntu 的启动选:
小工具 rcconf
#sudo apt-get rcconf
#sudo apt-get install rcconf
root 下运行: #sudo rcconf
效益重新全的工具sysv-rc-conf
#sudo apt-get update
#sudo apt-get install sysv-rc-conf
运行:#sudo sysv-rc-conf
啊得以一向进入启动程序,例如把 /etc/init.d/red5
插手到网活动启动列表中:
#sudo sysv-rc-conf red5 on
其它以格局显示: google::Ubuntu::sysv-rc-conf 命令用法

得有不少口以及自家正看这项条件的时候同,对这规格的讳充满疑惑。其实原因就是是这项条件最早是于1988年,由麻省师范大学之同员姓里的巾帼(BarbaraLiskov)指出来的。

啊堪直接改动
直接改 /etc/rc0.d ~ /etc/rc6.d 和 /etc/rcS.d
下的事物,S开的代表启动,K启的表示未启动,
譬如:想关闭 Red5 的开机自动启动,只需要 #sudo mv /etc/rc2.d/S20red5
/etc/rc2.d/K20red5 虽然足以了。

概念1:假若对各类一个连串为 T1之目的 o1,都发生品种也 T2 的靶子o2,使得以
T1概念之具备程序 P 在颇具的目的 o1 都替代换成 o2 时,程序 P
的行事并未发生变化,那么类型 T2 是系列 T1 的子类型。

Ubuntu自动启动程序

概念2:所有援基类的地点得能透明地应用该子类的对象。


先,linux随机启动的服务程序皆以/etc/init.d这么些文件夹里,里面的文件全体都是脚本文件(脚本程序一句话来说就是将要运行的次序写
到一个
文件里被系统能以梯次执行,类似windows下的autorun.dat文件),其余在/etc那一个文件夹里还有诸如名也rc1.d,
rc2.d一贯到rc6.d的文本夹,那个都是linux不同的runlevel,我们一般进入的X
windows多用户的运转级别是第5级,也虽然是rc5.d,在此文件夹下的脚本文件就运行第5级时若自由启动的服务程序。需要注意的凡,在每个rc
(1-6).d文件夹下之文本其实如故/etc/init.d文件夹下之公文之一个软连接(类似windows中之神速情势),也就是说,在
/etc/init.d文件夹下是全的服务程序,而每个rc(1-6).d只链接它好启动需要的对应的服务程序!

题目原因:有同效应P1,由类A完成。现用用效能P1举办扩充,扩张后的功用为P,其中P由原有职能P1与新效用P2组成。新职能P由类A的子类B来完成,则子类B在得新效能P2的而,有或会合招原本职能P1爆发故障。

使 启动scim
(某同先后),我们率先使清楚scim程序于哪,用locate命令可以找到,scim在/usr/bin/scim这里,其中usr表
示是
属于用户之,bin在linux里表示足执行的顺序。这样,我就好编制一个本子程序,把其放到/etc/init.d里,然后于rc5.d里做一个交互
应的软链接就足以了。

缓解方案:当用持续时,遵守里氏替换原则。类B继承类A时,除加加新的措施成功新增效能P2外,尽量不要还写父类A的不二法门,也尽可能不要重载父类A的格局。

是剧本其实深简短,就少于执:

继续包含这样平等叠意思:父类中凡是已经实现好的方(相对于肤浅方法而言),实际上是当设定一文山会海的正统以及契约,尽管它们不强制要求所有的子类必须信守这些契约,但是如果子类对这多少个不抽象方法任意修改,就会晤对任何继承体系造成破坏。而里氏替换原则就是是表明了立时同样叠含义。

#!/bin/bash

累作为面向对象三可怜特点有,在为程序设计带来巨大便利的以,也拉动了弊端。比如用持续会给程序带来侵入性,程序的可移植性降低,扩大了靶中的耦合性,如果一个近似让其他的类所继承,则当是仿佛需要改时,必须考虑到具有的子类,并且父类修改后,所有涉嫌到子类的功用还出或会面生故障。

/usr/bin/scim

举例表达继承的风险,我们需要完成一个少数相减的效率,由类A来承担。

先是执行是声称用什么终端运行此本子,第二实践就是一旦运行的吩咐。

class A{
    public int func1(int a, int b){
        return a-b;
    }
}

public class Client{
    public static void main(String[] args){
        A a = new A();
        System.out.println("100-50="+a.func1(100, 50));
        System.out.println("100-80="+a.func1(100, 80));
    }
} 


需要专注的少数是,在rc5.d里,每个链接的名字都是以S或者K开始的,S起先的象征是系统启动是一旦自由启动之,K先导的是未随意启动之。这样,你就足以精晓,假使自身一旦哪个服务随机启动,就管其名字第一独字母K改成S就可了,当然,把S改成为K后,这么些服务就是不克自由启动了。由此,我者链接
还要起名为SXXX,这样系统才会吃它们轻易启动。

运转结果:

在RH下,rc.local是默认启动的最后一个脚本文件,所以,

如果你想要随机启动,还有一种方法就是在rc.local的尾部加入/usr/bin/scim,这样就可以了。

100-50=50

Linux 自动启动程序

100-80=20

1.开机启动时自动运行程序

后来,我们得充实一个初的功能:完成两累相加,然后再次和100请求与,由类B来承担。即类B需要形成两独效益:

Linux 加载后, 它以初叶化硬件和设备驱动,
然后运行第一只经过init。init依据配置文件连续引导过程,启动其余进程。平常状态下,修改放置于
/etc/rc或 /etc/rc.d 或 /etc/rc?.d
目录下的剧本文件,可以使init自动启动其它程序。例如:编辑
/etc/rc.d/rc.local
文件(该文件一般是系统末段启动之本子),在文书最末尾加上一行“xinit”或“startx”,可以于开机启动后直接入X-Window。

  • 有限频繁相减。
  • 星星屡相加,然后又加100。

2.登录时自动运行程序

由类A已经落实了第一独力量,所以类B继承类A后,只待重新形成第二个效益就是可以了,代码如下:

用 户登录时,bash首先自动执行系统管理员建立的全局登录script
:/ect/profile。然后bash在用户起头目录下仍梯次查找三独奇特文件被的一个:/.bash_profile、/.bash_login、
/.profile,但惟独举办首批找到的一个。
由此,只需要因实际得在上述文件中投入命令就好实现用户登录时自动运行某些程序(类似于DOS下之Autoexec.bat)。

class B extends A{
    public int func1(int a, int b){
        return a+b;
    }

    public int func2(int a, int b){
        return func1(a,b)+100;
    }
}

public class Client{
    public static void main(String[] args){
        B b = new B();
        System.out.println("100-50="+b.func1(100, 50));
        System.out.println("100-80="+b.func1(100, 80));
        System.out.println("100+20+100="+b.func2(100, 20));
    }
} 

3.离登录时自动运行程序

类B完成后,运行结果:

退出登录时,bash自动执行个人的离登录脚本/.bash_logout。例如,在/.bash_logout中到场命令“tar
-cvzf c.source.tgz *.c”,则在每一趟退出登录时自动执行 “tar” 命令备份
*.c 文件。

100-50=150

4.年限自动运行程序

100-80=180

Linux有一个称呼crond的医护程序,重要职能是周期性地检查
/var/spool/cron目录下的平组命令文件之情节,并于设定的年月执行这多少个文件被之一声令下。用户可通过crontab
命令来确立、修改、删除这么些命令文件。

100+20+100=220

如,建立文件crondFile,内容吗“00 9 23 Jan *
HappyBirthday”,运行“crontab
cronFile”命令后,每当元月23日傍晚9:00连串自动执行“HappyBirthday”的次序(“*”表示管当天凡星期几)。

大家发现原先运行如常的相减功能发生了错。原因即是类B在吃方从名时无意中再写了父类的方法,造成所有运行相减功用的代码全体调用了类B重写后底办法,造成原本运行正常的职能出现了不当。在本例中,引用基类A完成的效率,换成子类B之后,发生了要命。在实质上编程中,大家平常会经还写父类的方来好新的力量,这样形容起来尽管简单,不过凡事继承连串之而复用性会相比差,特别是行使多态相比较频繁时,程序运行出错的几引导万分大。如若不尽管还写父类的不二法门,相比通用的做法是:原来的父类和子类都连续一个复浅的基类,原有的连续关系去丢,接纳依赖、聚合,组合等涉代替。

5.定时自动运行程序一样软

里氏替换原则通俗的来讲就是是:子类可以扩大父类的效劳,但不克改变父类原有的效果。它涵盖以下4叠含义:

定时执行命令at 与crond
类似(但她才进行同一不善):命令在加的时刻执行,但非自行重新。at命令的一般格式为:at
[ -f file ] time
,在指定的光阴执行file文件中所受闹的有命令。也只是径直由键盘输入命令:

  • 子类可以实现父类的泛方法,但不克覆盖父类的未抽象方法。
  • 子类中好加和谐有意的不二法门。
  • 当子类的法子重载父类的法马时,方法的放置条件(即方法的形参)要于父类方法的输入参数还宽。
  • 当子类的章程实现父类的纸上谈兵方法时,方法的后置条件(即方法的再次回到值)要比父类更严。

$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00
2000-11-09 12:00时分自动发一样标题为“Have a
lunch”,内容吧plan.txt文件内容之邮件给罗吉尔(Roger)(Gill)。?9 12:00
2000-11-09 12:00时自动发一样题目为“Have a
lunch”,内容为plan.txt文件内容的邮件被罗Gill。er。ger。er。

看起来很不可名状,因为大家会意识以友好编程中不时会违反里氏替换原则,程序还跑的良的。所以我们还碰面有如此的问题,假设我未要无照里氏替换原则会出什么结果?

Ubuntu 开机自动挂载windows分区

果便是:你写的代码来问题之几率将会大大增加。

倘诺挂载NTFS格式分区,需要NTFS-3g那些软件。它短小精悍,而且功用强大。
NTFS-3g是一个开源软件,它帮助以Windows下边读写NTFS格式的分区。它非凡的飞,同时为万分安全。它补助Windows
2000、XP和2003,并且协理有的契合POSIX标准的磁盘操作。

 

第一要修sources.list
#sudo gedit /etc/apt/sources.list

摘自 http://www.uml.org.cn/sjms/201211023.asp\#2

Ubuntu Drapper添加:
deb http://givre.cabspace.com/ubuntu/ dapper main main-all
deb http://ntfs-3g.sitesweetsite.info/ubuntu/ dapper main main-all
deb http://flomertens.keo.in/ubuntu/ dapper main main-all

Ubuntu Edgy添加:
deb http://givre.cabspace.com/ubuntu/ edgy main
起名,deb http://ntfs-3g.sitesweetsite.info/ubuntu/ edgy main
deb http://flomertens.keo.in/ubuntu/ edgy main

又必须导入GPG-Key,可以这样:
#wget http://flomertens.keo.in/ubuntu/givre\_key.asc -O- | sudo
apt-key add –
#wget http://givre.cabspace.com/ubuntu/givre\_key.asc -O- | sudo
apt-key add –

前日翻新一下源:
#sudo aptitude update

规范安装

于“终端”下边运行:
#sudo apt-get install ntfs-3g

配置NTFS-3g

率先看片硬盘分区的分区类型
#sudo fdisk -l

现今即令能够修改
/etc/fstab,来被Ubuntu启动的上自动挂载NTFS分区了。可是首先请求备份一下是文件:
#sudo cp /etc/fstab /etc/fstab.bak

确立挂载点,譬如挂载在 /media/windows 下边
#sudo mkdir /media/windows

今日得以于 /etc/fstab 的尾长
/dev/hda1 /media/ ntfs-3g defaults,locale=zh_CN.utf8 0 0
因自己之事态举行改动。

有些示范

挂载 /dev/hda3
添加 /dev/hda3 /media/windows ntfs-3g ro,locale=zh_CN.utf8,uid=1000 0 0

至于自己的locale

好就此脚的通令查看有的locale
#locale -a

设非思再起动,就可以
#sudo umount -a
#sudo mount -a

末段一个挂载FAT分区的一声令下
#sudo mount /dev/hda3 /media/windows/ -t vfat -o
iocharset=utf8,umask=000

自可以在/etc/fstab里面添加
/dev/hda3 /media/windows vfat iocharset=utf8,umask=000 0 0

Openfire就Ubuntu自动启动

openfire缺省意况下,是匪随便启动之。为了缓解每一回都设手工启动的劳动,我修了一个本子,放在/etc/init.d目录内
#sudo vim /etc/init.d/openfire
情如下:

#!/bin/sh

openfire_start(){
/etc/openfire/bin/openfire start
}

openfire_stop(){
/etc/openfire/bin/openfire stop
}

case $1 in
start)
openfire_start
;;
stop)
openfrie_stop
;;
*)
echo ‘Usage:openfire start|stop’
;;
esac

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图